PipClearDevNodeUserFlags

VOID __stdcall PipClearDevNodeUserFlags(_DEVICE_NODE *DeviceNode, UINT64 Flags){
  unsigned int UserFlags; 
  int v3; 
  wchar_t *Buffer; 
  INT64 v6; 
  INT64 v7; 

  UserFlags = DeviceNode->UserFlags;
  v3 = UserFlags & ~(_DWORD)Flags;
  DeviceNode->UserFlags = v3;
  if( (((unsigned __int16)UserFlags ^ (unsigned __int16)v3) & 0x347) != 0 )
  {
    Buffer = DeviceNode->InstancePath.Buffer;
    if( Buffer )
    {
      PnpRaiseNtPlugPlayDevicePropertyChangeEvent((INT64)DeviceNode, Buffer, 11);
      v6 = DeviceNode->UserFlags;
      if( (((unsigned __int8)UserFlags ^ LOBYTE(DeviceNode->UserFlags)) & 0x40) != 0 )
      {
        PnpRaiseNtPlugPlayDevicePropertyChangeEvent(v6, DeviceNode->InstancePath.Buffer, 29);
        LODWORD(v6) = DeviceNode->UserFlags;
      }
      v7 = UserFlags ^ (unsigned int)v6;
      if( (v7 & 4) != 0 )
        PnpRaiseNtPlugPlayDevicePropertyChangeEvent(v7, DeviceNode->InstancePath.Buffer, 30);
    }
  }
}

Referenced by:

IopRemoveDevice
PiDevCfgProcessDevice
PiProcessNewDeviceNode
PiProcessQueryDeviceState
PnpProcessAssignResources
PnpQueryRemoveLockedDeviceNode
PnpRestartDeviceNode
PnpTrackQueryRemoveDevices