PspNotificationPacketCallback
VOID __stdcall PspNotificationPacketCallback(_IO_MINI_COMPLETION_PACKET_USER *NotificationPacket, _EJOB *Job){
_ETHREAD *CurrentThread;
signed __int32 v4;
int v5;
unsigned int v6;
signed __int32 v7;
signed __int32 v8;
unsigned int v9;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
PspLockJobExclusive(Job, CurrentThread);
v4 = *((_DWORD *)Job + 330);
do
{
v5 = 0;
v6 = v4;
if( (v4 & 0x4000) != 0 && (v6 = v4 & 0xFFFFBFFF, (*((_DWORD *)Job + 219) & 0x800) != 0) )
{
v5 = 11;
}
else if( (v6 & 0x10000) != 0 && (v6 &= ~0x10000u, (*((_DWORD *)Job + 219) & 0x1000) != 0) )
{
v5 = 12;
}
else if( (v6 & 0x8000) != 0 )
{
v6 &= ~0x8000u;
if( (*((_BYTE *)Job + 876) & 0x10) != 0 )
v5 = 4;
}
v7 = v4;
v8 = v6 & 0xFFFFFFF7;
if( v5 )
v8 = v6;
v4 = _InterlockedCompareExchange((volatile signed __int32 *)Job + 330, v8, v4);
}
while( v7 != v4 );
v9 = *((_QWORD *)Job + 57) != 0i64 ? v5 : 0;
if( v9 )
{
IoSetIoCompletionEx(
*((PVOID *)Job + 57),
*((PVOID *)Job + 58),
0i64,
0i64,
v9,
0,
*((_IO_MINI_COMPLETION_PACKET_USER **)Job + 125));
_InterlockedIncrement64((volatile signed __int64 *)Job + 59);
}
PspUnlockJob(Job, CurrentThread);
if( !v9 )
ObfDereferenceObjectWithTag(Job, 0x624A7350ui64);
}Referenced by:
No references.