IoGetDeviceInstanceName
NTSTATUS __stdcall IoGetDeviceInstanceName(DEVICE_OBJECT *PhysicalDeviceObject, UNICODE_STRING *InstanceName){
UINT64 v2;
__int64 v5;
NTSTATUS result;
__int16 *v7;
_WORD *v8;
PVOID *v9;
PVOID *v10;
__int64 v11;
_WORD *v12;
__int64 v13;
_WORD *v14;
__int64 v15;
ULONG_PTR BugCheckParameter4;
INT64 v17;
if( !PhysicalDeviceObject )
goto LABEL_16;
v5 = *(_QWORD *)(*((_QWORD *)PhysicalDeviceObject + 39) + 40i64);
if( !v5 || (*(_DWORD *)(v5 + 396) & 0x20000) != 0 )
{
IoAddTriageDumpDataBlock(PhysicalDeviceObject, *((unsigned __int16 *)PhysicalDeviceObject + 1));
v7 = (__int16 *)*((_QWORD *)PhysicalDeviceObject + 1);
if( v7 )
{
IoAddTriageDumpDataBlock(v7, (unsigned int)v7[1]);
v8 = (_WORD *)(*((_QWORD *)PhysicalDeviceObject + 1) + 56i64);
if( *v8 )
{
IoAddTriageDumpDataBlock(v8, 2ui64);
IoAddTriageDumpDataBlock(
*(PVOID *)(*((_QWORD *)PhysicalDeviceObject + 1) + 64i64),
*(unsigned __int16 *)(*((_QWORD *)PhysicalDeviceObject + 1) + 56i64));
}
}
v9 = *(PVOID **)(*((_QWORD *)PhysicalDeviceObject + 39) + 40i64);
if( v9 )
{
v10 = v9 + 5;
IoAddTriageDumpDataBlock(v9, 0x310ui64);
if( *(_WORD *)v10 )
{
IoAddTriageDumpDataBlock(v10, 2ui64);
IoAddTriageDumpDataBlock(v10[1], *(unsigned __int16 *)v10);
}
v11 = *((_QWORD *)PhysicalDeviceObject + 39);
v12 = (_WORD *)(*(_QWORD *)(v11 + 40) + 56i64);
if( *v12 )
{
IoAddTriageDumpDataBlock(v12, 2ui64);
IoAddTriageDumpDataBlock(
*(PVOID *)(*(_QWORD *)(*((_QWORD *)PhysicalDeviceObject + 39) + 40i64) + 64i64),
*(unsigned __int16 *)(*(_QWORD *)(*((_QWORD *)PhysicalDeviceObject + 39) + 40i64) + 56i64));
v11 = *((_QWORD *)PhysicalDeviceObject + 39);
}
v13 = *(_QWORD *)(*(_QWORD *)(v11 + 40) + 16i64);
if( v13 )
{
v14 = (_WORD *)(v13 + 56);
if( *v14 )
{
IoAddTriageDumpDataBlock(v14, 2ui64);
v15 = *(_QWORD *)(*(_QWORD *)(*((_QWORD *)PhysicalDeviceObject + 39) + 40i64) + 16i64);
IoAddTriageDumpDataBlock(*(PVOID *)(v15 + 64), *(unsigned __int16 *)(v15 + 56));
}
}
}
LABEL_16:
KeBugCheckEx(0xCAu, 2ui64, (ULONG_PTR)PhysicalDeviceObject, 0i64, 0i64);
}
PnpConcatenateUnicodeStrings(InstanceName, (_UNICODE_STRING *)(v5 + 40), InstanceName, v2, BugCheckParameter4, v17);
return result;
}Referenced by:
WmipGetGuidObjectInstanceInfo
WmipQueryWmiDataBlock
WmipTranslatePDOInstanceNames