PspSendReliableJobNotification
VOID __stdcall PspSendReliableJobNotification(_EJOB *Job, UINT64 NotificationId){
UINT64 IoStatusInformation;
int v4;
int v5;
signed __int32 v6;
int v7;
int v8;
signed __int32 v9;
IoStatusInformation = (unsigned int)NotificationId;
v4 = 12;
if( (_DWORD)NotificationId == 11 )
{
v5 = 16396;
}
else
{
v5 = 65544;
v4 = 8;
if( (_DWORD)IoStatusInformation != 12 )
v5 = 32776;
}
v6 = *((_DWORD *)Job + 330);
do
{
v7 = v5;
v8 = v6 & 8;
if( (v6 & 8) == 0 )
v7 = v4;
v9 = v6;
v6 = _InterlockedCompareExchange((volatile signed __int32 *)Job + 330, v6 | v7, v6);
}
while( v9 != v6 );
if( !v8 )
{
ObfReferenceObjectWithTag(Job, 0x624A7350ui64);
IoSetIoCompletionEx(
*((PVOID *)Job + 57),
*((PVOID *)Job + 58),
0i64,
0i64,
IoStatusInformation,
0,
*((_IO_MINI_COMPLETION_PACKET_USER **)Job + 125));
_InterlockedIncrement64((volatile signed __int64 *)Job + 59);
}
}Referenced by:
PspEnforceLimitsJobPostCallback
PspEvaluateAndNotifyEmptyJob
PspJobNotificationWorker