IoUnregisterShutdownNotification

VOID __fastcall IoUnregisterShutdownNotification(_DEVICE_OBJECT *DeviceObject){
  UINT8 v2; 
  PVOID *v3; 
  KIRQL v4; 
  PVOID *v5; 
  PVOID *v6; 
  PVOID **v7; 
  PVOID *i; 
  PVOID *v9; 
  PVOID *v10; 
  PVOID **v11; 
  INT64 v12; 
  MmLockPagableSectionByHandle(ExPageLockHandle);
  v2 = KeAcquireQueuedSpinLock(0xAui64);
  v3 = (PVOID *)IopNotifyShutdownQueueHead;
  v4 = v2;
  while( v3 != &IopNotifyShutdownQueueHead )
  {
    v5 = v3;
    if( v3[2] == DeviceObject )
    {
      v6 = (PVOID *)*v3;
      if( *((PVOID **)*v3 + 1) != v3 || (v7 = (PVOID **)v3[1], *v7 != v3) )
LABEL_16:
        __fastfail(3u);
      *v7 = v6;
      v6[1] = v7;
      v3 = (PVOID *)v3[1];
      HalPutDmaAdapter((PADAPTER_OBJECT)DeviceObject);
      ExFreePoolWithTag(v5, 0);
    }
    v3 = (PVOID *)*v3;
  }
  for( i = (PVOID *)IopNotifyLastChanceShutdownQueueHead; i != &IopNotifyLastChanceShutdownQueueHead; i = (PVOID *)*i )
  {
    v9 = i;
    if( i[2] == DeviceObject )
    {
      v10 = (PVOID *)*i;
      if( *((PVOID **)*i + 1) != i )
        goto LABEL_16;
      v11 = (PVOID **)i[1];
      if( *v11 != i )
        goto LABEL_16;
      *v11 = v10;
      v10[1] = v11;
      i = (PVOID *)i[1];
      HalPutDmaAdapter((PADAPTER_OBJECT)DeviceObject);
      ExFreePoolWithTag(v9, 0);
    }
  }
  KeReleaseQueuedSpinLock(0xAui64, v4);
  MmUnlockPagableImageSection(ExPageLockHandle, v12);
  *((_DWORD *)DeviceObject + 12) &= ~0x800u;
}

Referenced by:

IoDeleteDevice