IopShutdownBaseFileSystems
VOID __fastcall IopShutdownBaseFileSystems(_LIST_ENTRY *ListHead){
_LIST_ENTRY *Flink;
_LIST_ENTRY *v3;
DEVICE_OBJECT *v4;
_LIST_ENTRY *v5;
_LIST_ENTRY *v6;
IRP *v7;
UINT64 v8;
UINT8 v9;
UINT8 v10;
_LIST_ENTRY *v11;
IRP *v12;
struct _IO_STATUS_BLOCK IoStatusBlock;
struct _KEVENT Object;
memset(&Object, 0, sizeof(Object));
IoStatusBlock = 0i64;
KeInitializeEvent(&Object, NotificationEvent, 0);
Flink = ListHead->Flink;
if( ListHead->Flink->Blink != ListHead || (v3 = Flink->Flink, Flink->Flink->Blink != Flink) )
LABEL_14:
__fastfail(3u);
ListHead->Flink = v3;
v3->Blink = ListHead;
while( Flink != ListHead )
{
Flink->Flink = 0i64;
Flink->Blink = 0i64;
ObfReferenceObject(&Flink[-5]);
IopIncrementDeviceObjectRefCount((_DEVICE_OBJECT *)&Flink[-5], 1u);
v5 = Flink - 5;
v4 = (DEVICE_OBJECT *)v5;
if( v5[1].Blink )
{
IoGetAttachedDevice((_DEVICE_OBJECT *)v5);
v5 = v6;
}
v7 = IoBuildSynchronousFsdRequest(0x10u, (PDEVICE_OBJECT)v5, 0i64, 0, 0i64, &Object, &IoStatusBlock);
if( v7 && IofCallDriver((PDEVICE_OBJECT)v5, v7) == 259 )
KeWaitForSingleObject(&Object, Executive, 0, 0, 0i64);
Flink = ListHead->Flink;
if( ListHead->Flink->Blink != ListHead )
goto LABEL_14;
v11 = Flink->Flink;
if( Flink->Flink->Blink != Flink )
goto LABEL_14;
ListHead->Flink = v11;
v11->Blink = ListHead;
KeResetEvent(&Object, v8, v9, v10, v12);
IopDecrementDeviceObjectRef(v4, 0, 1u);
HalPutDmaAdapter((PADAPTER_OBJECT)v4);
}
}Referenced by:
IoShutdownSystem