ExNotifyWithProcessing

VOID __fastcall ExNotifyWithProcessing(INT64 a1, INT64 a2, INT64 a3, INT64 a4){
  _QWORD *v4; 
  UINT64 *v8; 
  _QWORD *v9; 
  unsigned __int8 v10; 
  unsigned __int8 v11; 
  UINT64 v12; 
  unsigned __int8 v13; 
  if( a1 )
  {
    v4 = (_QWORD *)(a1 + 16);
    if( (_QWORD *)*v4 != v4 )
    {
      v8 = (UINT64 *)(a1 + 8);
      KeAcquireSpinLockRaiseToDpc((UINT64 *)(a1 + 8), a2);
      v9 = (_QWORD *)*v4;
      v11 = v10;
      if( v10 == 2 )
      {
        while( v9 != v4 )
        {
          ExpCallProcessing(1i64, v9[4], a2, a3, a4);
          ((void(__fastcall *)(_QWORD, INT64, INT64))v9[3])(v9[4], a2, a3);
          ExpCallProcessing(0i64, v9[4], a2, a3, a4);
          v9 = (_QWORD *)*v9;
        }
      }
      else
      {
        while( v9 != v4 )
        {
          if( !*((_BYTE *)v9 + 44) )
          {
            ++*((_DWORD *)v9 + 10);
            KxReleaseSpinLock(v8);
            __writecr8(v11);
            ExpCallProcessing(1i64, v9[4], a2, a3, a4);
            ((void(__fastcall *)(_QWORD, INT64, INT64))v9[3])(v9[4], a2, a3);
            ExpCallProcessing(0i64, v9[4], a2, a3, a4);
            KeAcquireSpinLockRaiseToDpc(v8, v12);
            --*((_DWORD *)v9 + 10);
            v11 = v13;
            if( *((_BYTE *)v9 + 44) )
            {
              if( !*((_DWORD *)v9 + 10) )
                KeSetEvent(&ExpCallbackEvent, 0);
            }
          }
          v9 = (_QWORD *)*v9;
        }
      }
      KxReleaseSpinLock(v8);
      __writecr8(v11);
    }
  }
}

Referenced by:

ExNotifyCallback
ExRebootSystemForRecovery
HvlPhase2Initialize
IopSessionChangeWorker
KiDynamicProcessorAddNotification
PnpNotifyEarlyLaunchImageLoad
PnpNotifyEarlyLaunchStatusUpdate
PoNotifySystemTimeSet
SepImageVerificationCallbackWorker