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