PipSetDevNodeUserFlags

VOID __stdcall PipSetDevNodeUserFlags(_DEVICE_NODE *DeviceNode, UINT64 Flags){
  unsigned int UserFlags; 
  wchar_t *Buffer; 
  INT64 v5; 
  INT64 v6; 

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

Referenced by:

IopInitializePlugPlayServices
PiDevCfgProcessDevice
PiProcessNewDeviceNode
PiProcessQueryDeviceState
PiProcessSetDeviceProblem
PnpQueryRemoveLockedDeviceNode
PnpShutdownDevices
PnpTrackQueryRemoveDevices