PspSendReliableJobNotification
VOID __stdcall PspSendReliableJobNotification(_EJOB *Job, UINT64 NotificationId){
UINT64 IoStatusInformation;
int v4;
int v5;
signed __int32 JobFlags;
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;
}
JobFlags = Job->JobFlags;
do
{
v7 = v5;
v8 = JobFlags & 8;
if( (JobFlags & 8) == 0 )
v7 = v4;
v9 = JobFlags;
JobFlags = _InterlockedCompareExchange((volatile signed __int32 *)&Job->1320, JobFlags | v7, JobFlags);
}
while( v9 != JobFlags );
if( !v8 )
{
ObfReferenceObjectWithTag(Job, 0x624A7350u);
IoSetIoCompletionEx(
Job->CompletionPort,
Job->CompletionKey,
0i64,
0i64,
IoStatusInformation,
0,
Job->NotificationPacket);
_InterlockedIncrement64((volatile signed __int64 *)&Job->CompletionCount);
}
}Referenced by:
PspEnforceLimitsJobPostCallback
PspEvaluateAndNotifyEmptyJob
PspJobNotificationWorker