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