ExUnregisterCallback
VOID __stdcall ExUnregisterCallback(PVOID CbRegistration){
UINT64 v1;
UINT64 *v2;
unsigned __int8 v4;
UINT64 v5;
UINT8 v6;
UINT8 v7;
unsigned __int8 v8;
_QWORD *v9;
PVOID *v10;
UINT64 v11;
IRP *v12;
v2 = (UINT64 *)*((_QWORD *)CbRegistration + 2);
KeAcquireSpinLockRaiseToDpc(v2 + 1, v1);
while( 1 )
{
v8 = v4;
if( !*((_DWORD *)CbRegistration + 10) )
break;
*((_BYTE *)CbRegistration + 44) = 1;
KeResetEvent(&ExpCallbackEvent, v5, v6, v7, v12);
KxReleaseSpinLock(v2 + 1);
__writecr8(v8);
KeWaitForSingleObject(&ExpCallbackEvent, Executive, 0, 0, 0i64);
KeAcquireSpinLockRaiseToDpc(v2 + 1, v11);
}
v9 = *(_QWORD **)CbRegistration;
v10 = (PVOID *)*((_QWORD *)CbRegistration + 1);
if( *(PVOID *)(*(_QWORD *)CbRegistration + 8i64) != CbRegistration || *v10 != CbRegistration )
__fastfail(3u);
*v10 = v9;
v9[1] = v10;
KxReleaseSpinLock(v2 + 1);
__writecr8(v8);
ExFreePoolWithTag(CbRegistration, 0);
ObfDereferenceObjectWithTag(v2, 0x746C6644ui64);
}Referenced by:
IoRegisterContainerNotification
IoUnregisterBootDriverCallback
IoUnregisterContainerNotification
IopCleanupNotifications
KeDeregisterProcessorChangeCallback
KeRegisterProcessorChangeCallback
PopUmpoInitializeMonitorChannel
SeUnregisterImageVerificationCallback