IoDeleteDevice
VOID *__stdcall IoDeleteDevice(PDEVICE_OBJECT DeviceObject){
unsigned int Flags;
unsigned __int16 *v2;
unsigned __int16 *v3;
_SECURITY_SUBJECT_CONTEXT *v5;
VOID *v6;
_IO_TIMER *Timer;
INT64 v8;
INT64 v9;
UINT8 v10;
VOID *result;
VOID **Pool_1;
UINT8 v13;
VOID *retaddr;
PULONG ReturnLength;
Flags = DeviceObject->Flags;
v2 = 0i64;
LODWORD(ReturnLength) = 0;
v3 = 0i64;
if( (Flags & 0x40) != 0 && ObQueryNameString(DeviceObject, 0i64, 0i64, (UINT64 *)&ReturnLength) == -1073741820 )
{
Pool_1 = IopVerifierExAllocatePool_1(1ui64, (unsigned int)ReturnLength);
v3 = (unsigned __int16 *)Pool_1;
if( Pool_1 )
{
if( ObQueryNameString(
DeviceObject,
(_OBJECT_NAME_INFORMATION *)Pool_1,
(unsigned int)ReturnLength,
(UINT64 *)&ReturnLength) >= 0 )
v2 = v3;
}
}
EtwTiLogDeviceObjectLoadUnload(0, &DeviceObject->DriverObject->DriverName.Length, v2);
if( v3 )
ExFreePoolWithTag(v3, 0);
if( (MmVerifierData & 0x90) != 0 )
IovDeleteDevice((_UNICODE_STRING *)DeviceObject, retaddr, v5, v6, v13);
if( (DeviceObject->Flags & 0x800) != 0 )
IoUnregisterShutdownNotification(DeviceObject);
Timer = DeviceObject->Timer;
if( Timer )
{
IopRemoveTimerFromTimerList(DeviceObject->Timer);
ExFreePoolWithTag(Timer, 0);
}
if( (DeviceObject->Flags & 0x40) != 0 )
ObMakeTemporaryObject(DeviceObject);
PoRunDownDeviceObject(DeviceObject);
PnpFreeInterruptInformation((__int64)DeviceObject);
v10 = KeAcquireQueuedSpinLock(10i64, v8, v9);
DeviceObject->DeviceObjectExtension->ExtensionFlags |= 2u;
if( DeviceObject->ReferenceCount )
KeReleaseQueuedSpinLock(LockQueueIoDatabaseLock, v10);
else
IopCompleteUnloadOrDelete(DeviceObject, 0, v10);
return result;
}Referenced by:
HalpAddDevice
IoCreateDeviceSecure
IoReportDetectedDevice
IopCreateRootEnumeratedDeviceObject
IopInitializeDeviceInstanceKey
IopInitializePlugPlayServices
IopLegacyResourceAllocation
IopPnPDispatch
IopRemoveLegacyDeviceNode
PiInitializeDevice
PiSwDestroyDeviceObject
PiSwGetChildPdo
RawDeleteVcb
RawInitialize
RawMountVolume
RawShutdown
VfFilterAttach
ViDdiDriverEntry
ViFilterDispatchPnp
VrpRegistryUnload
WmipDriverEntry