PnpQueryID

VOID __fastcall PnpQueryID(_DEVICE_NODE *DeviceNode, BUS_QUERY_ID_TYPE IDType, WCHAR **ID, UINT64 *IDLength){
  DEVICE_OBJECT *v5; 
  int v9; 
  UINT64 v10; 
  UINT64 v11; 
  UINT64 v12; 
  int v13; 
  __int64 v14; 
  UNICODE_STRING *v15; 
  UNICODE_STRING *LogString; 
  UNICODE_STRING InsertionString2; 
  *(_DWORD *)(&InsertionString2.MaximumLength + 1) = 0;
  v5 = (DEVICE_OBJECT *)*((_QWORD *)DeviceNode + 4);
  *(_DWORD *)IDLength = 0;
  v9 = PnpIrpQueryID(v5, IDType, ID);
  if( v9 < 0 )
  {
LABEL_15:
    if( v9 == -1073479624 || IDType == BusQueryDeviceID || IDType == BusQueryInstanceID && v9 == -1073741670 )
    {
      PipSetDevNodeProblem((__int64)DeviceNode, 9, v9);
      v14 = *((_QWORD *)DeviceNode + 2);
      if( (*(_DWORD *)(v14 + 396) & 0x200000) == 0 )
      {
        PipSetDevNodeFlags(v14, 0x200000);
        PnpSetInvalidIDEvent((PUNICODE_STRING)(*((_QWORD *)DeviceNode + 2) + 40i64));
      }
    }
    if( v9 != -1073479624 && IDType == BusQueryDeviceID && v9 != -1073741670 && v9 != -1073741810 )
    {
      LODWORD(LogString) = 0;
      v15 = (UNICODE_STRING *)(*((_QWORD *)DeviceNode + 2) + 56i64);
      *(_DWORD *)&InsertionString2.Length = 5242958;
      InsertionString2.Buffer = L"failed IRP_MN_QUERY_ID-BusQueryDeviceID";
      PnpLogEvent(v15, &InsertionString2, (unsigned int)v9, 0i64, (UINT64)LogString);
    }
    if( *ID )
    {
      ExFreePoolWithTag(*ID, 0);
      *ID = 0i64;
      *(_DWORD *)IDLength = 0;
    }
    return;
  }
  if( IDType == BusQueryDeviceID )
  {
    v10 = 1i64;
LABEL_7:
    v12 = 0i64;
    v11 = 200i64;
    goto LABEL_8;
  }
  if( IDType > BusQueryDeviceID )
  {
    if( IDType <= BusQueryCompatibleIDs )
    {
      v10 = 0xFFFFFFFFi64;
      v11 = 1024i64;
      v12 = 1i64;
LABEL_8:
      v13 = PnpFixupID(*ID, v11, v12, v10, (UNICODE_STRING *)(*((_QWORD *)DeviceNode + 2) + 56i64));
      goto LABEL_9;
    }
    if( IDType == BusQueryInstanceID )
    {
      v10 = 0i64;
      goto LABEL_7;
    }
  }
  v13 = 0;
LABEL_9:
  *(_DWORD *)IDLength = 2 * v13;
  if( !(2 * v13) )
    v9 = -1073479624;
  if( v9 < 0 )
    goto LABEL_15;
}

Referenced by:

PiProcessNewDeviceNode
PipProcessStartPhase3