NtSetWnfProcessNotificationEvent
INT64 __fastcall NtSetWnfProcessNotificationEvent(VOID *NotificationEvent){
_ETHREAD *CurrentThread;
__int64 v3;
_WNF_PROCESS_CONTEXT *v4;
int v5;
_WNF_PROCESS_CONTEXT *ProcessContext;
PVOID Object;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
v3 = *((_QWORD *)KeGetCurrentThread() + 23);
ProcessContext = *(_WNF_PROCESS_CONTEXT **)(v3 + 2152);
v4 = ProcessContext;
if( !ProcessContext )
{
v5 = ExpWnfCreateProcessContext((_EPROCESS *)v3, &ProcessContext);
if( v5 < 0 )
goto LABEL_5;
v4 = ProcessContext;
}
Object = 0i64;
v5 = ObReferenceObjectByHandle(NotificationEvent, 2u, (POBJECT_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((__int64)KeGetCurrentThread());
return(unsigned int)v5;
}Referenced by:
No references.