NtGetCompleteWnfStateSubscription
NTSTATUS __stdcall NtGetCompleteWnfStateSubscription(
_WNF_STATE_NAME *OldDescriptorStateName,
UINT64 *OldSubscriptionId,
UINT64 OldDescriptorEventMask,
UINT64 OldDescriptorStatus,
_WNF_DELIVERY_DESCRIPTOR *NewDeliveryDescriptor,
UINT64 DescriptorSize){
__int64 v7;
_ETHREAD *CurrentThread;
int v9;
_WNF_PROCESS_CONTEXT *WnfContext;
UINT64 OldStatus;
__int64 OldStateName;
v7 = (__int64)OldDescriptorStateName;
OldStateName = 0i64;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
v9 = -1073741811;
WnfContext = (_WNF_PROCESS_CONTEXT *)KeGetCurrentThread()->ApcState.Process->WnfContext;
if( WnfContext )
{
if( !OldDescriptorStateName || !OldSubscriptionId )
goto LABEL_11;
if( (_DWORD)OldDescriptorEventMask && (!(_DWORD)OldDescriptorStatus || (_DWORD)OldDescriptorStatus == -1073741267) )
{
if( (unsigned __int64)OldDescriptorStateName >= 0x7FFFFFFF0000i64 )
v7 = 0x7FFFFFFF0000i64;
OldStateName = *(_QWORD *)v7;
if( (unsigned __int64)OldSubscriptionId >= 0x7FFFFFFF0000i64 )
OldSubscriptionId = (UINT64 *)0x7FFFFFFF0000i64;
LODWORD(OldStatus) = OldDescriptorStatus;
v9 = ExpWnfCompleteThreadSubscriptions(
WnfContext,
&OldStateName,
*OldSubscriptionId,
(unsigned int)OldDescriptorEventMask,
OldStatus);
if( v9 >= 0 )
{
LABEL_11:
if( (_DWORD)DescriptorSize )
{
if( (unsigned int)DescriptorSize < 0x1030 )
{
v9 = -1073741789;
}
else
{
ProbeForWrite((UINT64)NewDeliveryDescriptor, (unsigned int)DescriptorSize, 8i64);
v9 = ExpWnfDeliverThreadNotifications(WnfContext, NewDeliveryDescriptor, (unsigned int)DescriptorSize);
}
}
}
}
}
KeLeaveCriticalRegionThread(KeGetCurrentThread());
return v9;
}Referenced by:
No references.