PiDqGetRelativeObjectRegPath

NTSTATUS __stdcall PiDqGetRelativeObjectRegPath(WCHAR *ObjectName, PNP_OBJECT_TYPE ObjectType, WCHAR **RegPath){
  VOID **BaseKeyPath; 
  HPNPCTX *v7; 
  WCHAR *v8; 
  int v9; 
  NTSTATUS DeviceRegKeyPath; 
  NTSTATUS v11; 
  int v13; 
  int v14; 
  int v15; 
  int v16; 
  INT16 v17; 
  UINT64 Create; 
  UINT64 BaseKeyLength; 

  BaseKeyPath = ExAllocatePoolWithTag(1ui64, 0x800ui64, 1483763280i64);
  *RegPath = (WCHAR *)BaseKeyPath;
  if( !BaseKeyPath )
  {
    v11 = -1073741670;
    goto LABEL_13;
  }
  v9 = ObjectType - 1;
  if( !v9 )
  {
    LODWORD(BaseKeyLength) = 1024;
    DeviceRegKeyPath = CmGetDeviceRegKeyPath(
                         *(&stru_140CF2E80 + 607),
                         ObjectName,
                         CM_KEY_TYPE_DEVICE_INSTANCE,
                         0i64,
                         0,
                         (WCHAR *)BaseKeyPath,
                         BaseKeyLength,
                         0i64);
    goto LABEL_4;
  }
  v13 = v9 - 1;
  if( !v13 )
  {
    v17 = 32;
    goto LABEL_20;
  }
  v14 = v13 - 1;
  if( !v14 )
  {
    LODWORD(BaseKeyLength) = 1024;
    DeviceRegKeyPath = CmGetDeviceInterfaceRegKeyPath(
                         v7,
                         ObjectName,
                         CM_KEY_TYPE_DEVICE_INTERFACE_INSTANCE,
                         0i64,
                         Create,
                         (WCHAR *)BaseKeyPath,
                         BaseKeyLength,
                         0i64);
    goto LABEL_4;
  }
  v15 = v14 - 1;
  if( !v15 )
  {
    v17 = 64;
LABEL_20:
    CmGetCommonClassRegKeyPath((INT64)v7, ObjectName, v17, 0i64, Create, (_NTSTRSAFE_PWSTR)BaseKeyPath, 0x400u, 0i64);
LABEL_4:
    v11 = DeviceRegKeyPath;
    if( DeviceRegKeyPath >= 0 )
      return v11;
    goto LABEL_13;
  }
  v16 = v15 - 1;
  if( !v16 )
  {
    LODWORD(BaseKeyLength) = 1024;
    DeviceRegKeyPath = CmGetDeviceContainerRegKeyPath(
                         v7,
                         ObjectName,
                         CM_KEY_TYPE_DEVICE_CONTAINER,
                         v8,
                         Create,
                         (WCHAR *)BaseKeyPath,
                         BaseKeyLength,
                         0i64);
    goto LABEL_4;
  }
  if( v16 == 1 )
  {
    CmGetDevicePanelRegKeyPath(
      (INT64)v7,
      ObjectName,
      96i64,
      (INT64)v8,
      Create,
      (_NTSTRSAFE_PWSTR)BaseKeyPath,
      0x400u,
      0i64);
    goto LABEL_4;
  }
  v11 = -1073741811;
LABEL_13:
  if( *RegPath )
  {
    ExFreePoolWithTag(*RegPath, 0x58706E50u);
    *RegPath = 0i64;
  }
  return v11;
}

Referenced by:

PiDqDeleteUserObject
PiDqOpenUserObjectRegKey