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