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