NtSetWnfProcessNotificationEvent
NTSTATUS __stdcall NtSetWnfProcessNotificationEvent(VOID *NotificationEvent){
_ETHREAD *CurrentThread;
_EPROCESS *Process;
_WNF_PROCESS_CONTEXT *v4;
int v5;
_WNF_PROCESS_CONTEXT *ProcessContext;
PVOID Object;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
Process = KeGetCurrentThread()->ApcState.Process;
ProcessContext = (_WNF_PROCESS_CONTEXT *)Process->WnfContext;
v4 = ProcessContext;
if( !ProcessContext )
{
v5 = ExpWnfCreateProcessContext(Process, &ProcessContext);
if( v5 < 0 )
goto LABEL_5;
v4 = ProcessContext;
}
Object = 0i64;
v5 = ObReferenceObjectByHandle(NotificationEvent, 2ui64, (_OBJECT_TYPE *)ExEventObjectType, 1, &Object, 0i64);
if( v5 >= 0 )
{
if( _InterlockedCompareExchange64((volatile signed __int64 *)&v4->NotificationEvent, (signed __int64)Object, 0i64) )
{
HalPutDmaAdapter((PADAPTER_OBJECT)Object);
v5 = -1073740008;
}
else
{
v5 = 0;
}
}
LABEL_5:
KeLeaveCriticalRegionThread(KeGetCurrentThread());
return v5;
}Referenced by:
No references.