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