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.