ExUnregisterCallback
VOID __stdcall ExUnregisterCallback(VOID *CbRegistration){
UINT64 *v1;
unsigned __int8 i;
unsigned __int8 v4;
_QWORD *v5;
VOID **v6;
v1 = (UINT64 *)*((_QWORD *)CbRegistration + 2);
for( i = KeAcquireSpinLockRaiseToDpc(v1 + 1); ; i = KeAcquireSpinLockRaiseToDpc(v1 + 1) )
{
v4 = i;
if( !*((_DWORD *)CbRegistration + 10) )
break;
*((_BYTE *)CbRegistration + 44) = 1;
KeResetEvent((_KEVENT *)((char *)&ExBootDevicesRemovedEvent + 64));
KxReleaseSpinLock(v1 + 1);
__writecr8(v4);
KeWaitForSingleObject((UINT64)&ExBootDevicesRemovedEvent + 64, 0, 0, 0, 0i64);
}
v5 = *(_QWORD **)CbRegistration;
v6 = (VOID **)*((_QWORD *)CbRegistration + 1);
if( *(VOID **)(*(_QWORD *)CbRegistration + 8i64) != CbRegistration || *v6 != CbRegistration )
__fastfail(3u);
*v6 = v5;
v5[1] = v6;
KxReleaseSpinLock(v1 + 1);
__writecr8(v4);
ExFreePoolWithTag(CbRegistration, 0);
ObfDereferenceObjectWithTag(v1, 0x746C6644ui64);
}Referenced by:
IoRegisterContainerNotification
IoUnregisterBootDriverCallback
IoUnregisterContainerNotification
IopCleanupNotifications
KeDeregisterProcessorChangeCallback
KeRegisterProcessorChangeCallback
PopUmpoInitializeMonitorChannel
SeUnregisterImageVerificationCallback