PiControlGetUserFlagsFromDeviceNode

VOID __stdcall PiControlGetUserFlagsFromDeviceNode(_DEVICE_NODE *DeviceNode, UINT64 *StatusFlags){
  _BOOL4 IsDevNodeDNStarted; 
  int v5; 
  int v6; 
  UINT8 IsRootEnumeratedDevice; 
  unsigned int UserFlags; 
  unsigned int Flags; 
  int v10; 
  int v11; 
  int v12; 
  int v13; 
  int v14; 
  int v15; 
  int v16; 
  int v17; 
  int v18; 
  int v19; 
  int v20; 
  int v21; 
  int v22; 
  int v23; 

  PipAreDriversLoaded((__int64)DeviceNode);
  IsDevNodeDNStarted = PipIsDevNodeDNStarted((__int64)DeviceNode);
  v6 = v5 | 8;
  if( !IsDevNodeDNStarted )
    v6 = v5;
  IsRootEnumeratedDevice = CmIsRootEnumeratedDevice(DeviceNode->InstancePath.Buffer);
  UserFlags = DeviceNode->UserFlags;
  Flags = DeviceNode->Flags;
  v10 = v6 | 1;
  if( !IsRootEnumeratedDevice )
    v10 = v6;
  v11 = v10 | 0x4000;
  if( (DeviceNode->CapabilityFlags & 0x10) == 0 )
    v11 = v10;
  v12 = v11 | 0x40000;
  if( (UserFlags & 1) == 0 )
    v12 = v11;
  v13 = v12 | 0x40000000;
  if( (UserFlags & 2) == 0 )
    v13 = v12;
  v14 = v13 | 0x2000000;
  if( (UserFlags & 0x40) == 0 )
    v14 = v13;
  v15 = v14 | 0x100;
  if( (UserFlags & 4) == 0 )
    v15 = v14;
  v16 = v15 | 0x8000;
  if( (Flags & 0x4000) == 0 )
    v16 = v15;
  v17 = v16 | 0x400;
  if( (Flags & 0x2000) == 0 )
    v17 = v16;
  v18 = v17 | 0x40;
  if( (DeviceNode->Flags & 0x100000) == 0 )
    v18 = v17;
  v19 = v18 | 0x1000;
  if( (Flags & 0x1000) == 0 )
    v19 = v18;
  v20 = v19 | 0x200;
  if( (Flags & 0x200000) == 0 )
    v20 = v19;
  v21 = v20 | 0x2000;
  if( DeviceNode->DisableableDepends )
    v21 = v20;
  v22 = v21 | 0x10000;
  if( (UserFlags & 0x100) == 0 )
    v22 = v21;
  v23 = v22 | 0x20000;
  if( (UserFlags & 0x200) == 0 )
    v23 = v22;
  *(_DWORD *)StatusFlags = v23;
}

Referenced by:

PiControlGetSetDeviceStatus