PnpDeleteLockedDeviceNode
INT64 __fastcall PnpDeleteLockedDeviceNode(
_DEVICE_NODE *DeviceNode,
_PNP_DEVICE_DELETE_TYPE OperationCode,
UINT64 Problem,
INT64 ProblemStatus,
_PNP_VETO_TYPE *VetoType,
_UNICODE_STRING *VetoName){
unsigned int v6;
unsigned int v7;
unsigned int v8;
__int32 v10;
__int32 v11;
UINT64 v13;
v6 = 0;
v7 = ProblemStatus;
v8 = Problem;
if( OperationCode )
{
v10 = OperationCode - 1;
if( v10 )
{
v11 = v10 - 1;
if( v11 )
{
if( v11 == 1 )
{
PoFxActivateDevice(*((DEVICE_OBJECT **)DeviceNode + 4));
*((_DWORD *)DeviceNode + 176) |= 8u;
PnpSurpriseRemoveLockedDeviceNode((ULONG_PTR)DeviceNode, v8, (_PNP_DEVNODE_STATE *)v7);
}
}
else
{
PoFxActivateDevice(*((DEVICE_OBJECT **)DeviceNode + 4));
*((_DWORD *)DeviceNode + 176) |= 0x10u;
PnpRemoveLockedDeviceNode(DeviceNode, v8, v7);
}
}
else
{
if( (*((_DWORD *)DeviceNode + 176) & 4) == 0 )
KeBugCheckEx(0xCAu, 0xDui64, (ULONG_PTR)DeviceNode, 4ui64, 0i64);
PoFxIdleDevice(*((DEVICE_OBJECT **)DeviceNode + 4));
*((_DWORD *)DeviceNode + 176) &= ~4u;
if( *((_DWORD *)DeviceNode + 75) == 784 )
{
IopRemoveDevice(*((DEVICE_OBJECT **)DeviceNode + 4), 3ui64);
PipRestoreDevNodeState((__int64)DeviceNode, v13);
PnpStartedDeviceNodeDependencyCheck((__int64)DeviceNode);
}
}
}
else
{
PoFxActivateDevice(*((DEVICE_OBJECT **)DeviceNode + 4));
*((_DWORD *)DeviceNode + 176) |= 4u;
return(unsigned int)PnpQueryRemoveLockedDeviceNode((__int64)DeviceNode, v8, VetoType, VetoName);
}
return v6;
}Referenced by:
PnpCancelRemoveOnHungDevices
PnpDeleteLockedDeviceNodes