RtlRaiseCustomSystemEventTrigger
NTSTATUS __fastcall RtlRaiseCustomSystemEventTrigger(INT64 a1){
int updated;
char *v2;
char *v3;
VOID *Buffer;
VOID *Buffera;
UINT64 *BufferSize;
UINT64 CheckStamp;
UINT64 InfoBuffer;
UINT64 ChangeStamp;
INT64 v11;
_UNICODE_STRING DestinationString;
__int128 v13;
_WNF_STATE_NAME StateName;
_GUID Guid;
HIDWORD(InfoBuffer) = 0;
LODWORD(ChangeStamp) = 0;
v11 = 0i64;
StateName = (_WNF_STATE_NAME)WNF_SEB_DEV_MNF_CUSTOM_NOTIFICATION_RECEIVED;
v13 = 0i64;
DestinationString = 0i64;
Guid = 0i64;
if( !a1 )
return -1073741811;
RtlInitUnicodeString(&DestinationString, *(PCWSTR *)(a1 + 8));
updated = RtlGUIDFromString(&DestinationString, &Guid);
if( updated < 0 )
return updated;
if( _InterlockedExchange(&RtlpCtPublishInProgress, 1) )
return -1073741823;
LODWORD(InfoBuffer) = 4096;
LODWORD(v2) = RtlpCtAllocateMemory(4096);
v3 = v2;
if( v2 )
{
updated = ZwQueryWnfStateData(&StateName, 0i64, 0i64, &ChangeStamp, v2, &InfoBuffer);
if( updated >= 0 )
{
LODWORD(Buffer) = 4;
updated = ZwQueryWnfStateNameInformation(
&StateName,
WnfInfoIsQuiescent,
0i64,
(char *)&InfoBuffer + 4,
(UINT64)Buffer);
if( updated >= 0 )
{
if( HIDWORD(InfoBuffer) )
{
LODWORD(Buffera) = 4;
updated = ZwQueryWnfStateNameInformation(
&StateName,
WnfInfoSubscribersPresent,
0i64,
(char *)&InfoBuffer + 4,
(UINT64)Buffera);
if( updated >= 0 )
{
if( HIDWORD(InfoBuffer) )
{
LODWORD(InfoBuffer) = 4096;
if( v3 == (char *)-8i64 )
{
updated = -1073741811;
}
else
{
updated = 0;
*(_OWORD *)(v3 + 8) = v13;
*(_GUID *)(v3 + 24) = Guid;
*((_DWORD *)v3 + 10) = 16;
LODWORD(InfoBuffer) = 36;
}
if( updated >= 0 )
{
*(_DWORD *)v3 = 0;
*((_DWORD *)v3 + 1) = -1;
*(_DWORD *)v3 = 4 * (InfoBuffer & 0xFFF | 0x100000);
updated = RtlpCtContextInit(&v11, (unsigned int)ChangeStamp);
if( updated >= 0 )
{
LODWORD(CheckStamp) = 1;
LODWORD(BufferSize) = ChangeStamp;
updated = ZwUpdateWnfStateData(
&StateName,
v3,
(unsigned int)(InfoBuffer + 8),
0i64,
0i64,
(UINT64)BufferSize,
CheckStamp);
if( updated >= 0 )
{
RtlpCtQueueWorkItem(*(_WORK_QUEUE_ITEM **)v11);
goto LABEL_25;
}
}
if( v11 )
RtlpCtContextFree((PVOID)v11);
}
}
else
{
updated = -1073741653;
}
}
}
else
{
updated = -1073741823;
}
}
}
}
else
{
updated = -1073741670;
}
_InterlockedExchange(&RtlpCtPublishInProgress, 0);
LABEL_25:
if( v3 )
RtlpCtFreeMemory(v3);
return updated;
}Referenced by:
No references.