NtGetCompleteWnfStateSubscription
NTSTATUS __stdcall NtGetCompleteWnfStateSubscription(
_WNF_STATE_NAME *OldDescriptorStateName,
UINT64 *OldSubscriptionId,
UINT64 OldDescriptorEventMask,
UINT64 OldDescriptorStatus,
_WNF_DELIVERY_DESCRIPTOR *NewDeliveryDescriptor,
UINT64 DescriptorSize){
__int64 v7;
_ETHREAD *CurrentThread;
NTSTATUS v9;
volatile INT32 *v10;
INT64 v12;
INT64 v13;
v7 = (__int64)OldDescriptorStateName;
v13 = 0i64;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
v9 = -1073741811;
v10 = *(volatile INT32 **)(*((_QWORD *)KeGetCurrentThread() + 23) + 2152i64);
if( v10 )
{
if( !OldDescriptorStateName || !OldSubscriptionId )
goto LABEL_11;
if( (_DWORD)OldDescriptorEventMask && (!(_DWORD)OldDescriptorStatus || (_DWORD)OldDescriptorStatus == -1073741267) )
{
if( (unsigned __int64)OldDescriptorStateName >= 0x7FFFFFFF0000i64 )
v7 = 0x7FFFFFFF0000i64;
v13 = *(_QWORD *)v7;
if( (unsigned __int64)OldSubscriptionId >= 0x7FFFFFFF0000i64 )
OldSubscriptionId = (UINT64 *)0x7FFFFFFF0000i64;
LODWORD(v12) = OldDescriptorStatus;
v9 = ExpWnfCompleteThreadSubscriptions(v10, &v13, *OldSubscriptionId, (unsigned int)OldDescriptorEventMask, v12);
if( v9 >= 0 )
{
LABEL_11:
if( (_DWORD)DescriptorSize )
{
if( (unsigned int)DescriptorSize < 0x1030 )
{
v9 = -1073741789;
}
else
{
ProbeForWrite(NewDeliveryDescriptor, (unsigned int)DescriptorSize, 8ui64);
v9 = ExpWnfDeliverThreadNotifications(
(_WNF_PROCESS_CONTEXT *)v10,
NewDeliveryDescriptor,
(unsigned int)DescriptorSize);
}
}
}
}
}
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
return v9;
}Referenced by:
No references.