PspJobNotificationWorker

VOID __stdcall PspJobNotificationWorker(VOID *Context){
  __int64 v1; 
  __int64 v2; 
  signed __int32 v3; 
  _ETHREAD *CurrentThread; 
  UINT64 MatchingChangeStamp; 
  UINT64 CheckStamp; 

  do
  {
    v1 = _InterlockedExchange64(&PspJobNotificationList, -1i64);
    do
    {
      v2 = *(_QWORD *)(v1 + 968);
      _m_prefetchw((const void *)(v1 + 1320));
      v3 = _InterlockedAnd((volatile signed __int32 *)(v1 + 1320), 0xFFFDDFFF);
      if( (v3 & 0x2000) != 0 )
      {
        LODWORD(CheckStamp) = 0;
        LODWORD(MatchingChangeStamp) = 0;
        ZwUpdateWnfStateData(
          (const _WNF_STATE_NAME *)(v1 + 880),
          0i64,
          0i64,
          0i64,
          0i64,
          MatchingChangeStamp,
          CheckStamp);
      }
      if( (v3 & 0x20000) != 0 )
      {
        CurrentThread = (_ETHREAD *)KeGetCurrentThread();
        PspLockJobExclusive((_EJOB *)v1, CurrentThread);
        if( *(_QWORD *)(v1 + 456) && (*(_DWORD *)(v1 + 876) & 0x1000) != 0 )
          PspSendReliableJobNotification((_EJOB *)v1, 0xCui64);
        PspUnlockJob((_EJOB *)v1, CurrentThread);
      }
      ObfDereferenceObjectWithTag((VOID *)v1, 0x6F4E7350ui64);
      v1 = v2;
    }
    while( v2 && v2 != -1 );
  }
  while( _InterlockedCompareExchange64(&PspJobNotificationList, 0i64, -1i64) != -1 );
}

Referenced by:

No references.