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