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.