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