SiGetBootDeviceName

NTSTATUS __stdcall SiGetBootDeviceName(INT64 a1, WCHAR *rdx0, INT64 a3, PARTITION_STYLE *a4, CHAR a5, WCHAR **a6){
  WCHAR *v6; 
  WCHAR *v7; 
  WCHAR *v8; 
  char v9; 
  NTSTATUS BootDeviceNameFromRegistry; 
  void *v11; 
  int v12; 
  __int64 v13; 
  __int64 v14; 
  UINT64 v15; 
  VOID **PoolWithTag; 
  _GUID *v17; 
  PARTITION_INFORMATION_EX *v18; 
  WORD *v20; 
  __int64 v21; 
  VOID **v22; 
  int v23; 
  int v24; 
  int v25; 
  int v26; 
  WCHAR *ResultName; 
  INT64 a2; 
  int v29; 

  v29 = a1;
  v24 = 0;
  v23 = 0;
  v6 = 0i64;
  v25 = 0;
  v7 = 0i64;
  v26 = 0;
  v8 = 0i64;
  ResultName = 0i64;
  v9 = a3;
  a2 = 0i64;
  BootDeviceNameFromRegistry = SiGetBootDeviceNameFromRegistry(rdx0, (INT64)&a2, a3, (UINT64 *)a4);
  v11 = (void *)a2;
  v12 = BootDeviceNameFromRegistry;
  if( BootDeviceNameFromRegistry < 0 )
    goto LABEL_17;
  v13 = -1i64;
  v14 = -1i64;
  do
    ++v14;
  while( *(_WORD *)(a2 + 2 * v14) );
  if( snwscanf_s((const wchar_t *)a2, v14 + 1, L"multi(%d)disk(%d)rdisk(%d)partition(%d)", &v23, &v24, &v26, &v25) != 4 )
  {
    v12 = -1073741823;
    goto LABEL_17;
  }
  if( !v23 && !v24 )
  {
    v15 = v14 + 11;
    PoolWithTag = ExAllocatePoolWithTag(1ui64, 2 * v15, 1263556947i64);
    v7 = (WCHAR *)PoolWithTag;
    if( !PoolWithTag )
    {
      v12 = -1073741670;
      goto LABEL_17;
    }
    swprintf_s((WCHAR *)PoolWithTag, v15, (WCHAR *)L"%s%s", L"\\ArcName\\", v11);
    v12 = SiTranslateSymbolicLink(v7, &ResultName);
    if( v12 >= 0 )
    {
      v8 = ResultName;
      if( v9 )
      {
        v12 = SiValidateSystemPartition(ResultName, a4, v17, v18);
        if( v12 < 0 )
        {
LABEL_11:
          if( v8 )
            ExFreePoolWithTag(v8, 0);
          goto LABEL_13;
        }
      }
      if( v29 )
        goto LABEL_21;
      v20 = wcsstr(v7, (INT8 *)L"partition");
      if( v20 )
        *v20 = 0;
      do
        ++v13;
      while( v7[v13] );
      v21 = 2 * v13 + 2;
      v22 = ExAllocatePoolWithTag(1ui64, v21, 1263556947i64);
      v6 = (WCHAR *)v22;
      if( !v22 )
      {
        v12 = -1073741670;
        goto LABEL_11;
      }
      memmove(v22, v7, v21);
      ExFreePoolWithTag(v8, 0);
      ResultName = 0i64;
      v12 = SiTranslateSymbolicLink(v6, &ResultName);
      if( v12 >= 0 )
      {
        v8 = ResultName;
LABEL_21:
        *a6 = v8;
        goto LABEL_22;
      }
    }
    v8 = ResultName;
    goto LABEL_11;
  }
  v12 = -1073741823;
LABEL_22:
  if( v12 < 0 )
    goto LABEL_11;
LABEL_13:
  if( v7 )
    ExFreePoolWithTag(v7, 0);
  if( v6 )
    ExFreePoolWithTag(v6, 0);
LABEL_17:
  if( v11 )
    ExFreePoolWithTag(v11, 0);
  return v12;
}

Referenced by:

SiGetFirmwareSystemPartition
SiGetSystemDisk
SiGetSystemPartition