PiDevCfgResolveVariableSwitchCase
INT64 __fastcall PiDevCfgResolveVariableSwitchCase(INT64 a1, VOID *a2, INT64 a3){
int RegistryValue;
unsigned int *v7;
int v8;
unsigned int v9;
wchar_t *v10;
NTSTATUS v11;
const WCHAR *v12;
NTSTATUS v13;
int v15;
PVOID P;
CHAR *v17;
INT64 v18;
wchar_t pszDest[12];
P = 0i64;
v17 = 0i64;
v18 = 0i64;
RegistryValue = IopGetRegistryValue(a2, (PWCHAR)L"Switch", 0i64, (KEY_VALUE_FULL_INFORMATION **)&P);
if( RegistryValue < 0 )
goto LABEL_20;
v7 = (unsigned int *)P;
if( !PnpValidateRegistryString((KEY_VALUE_FULL_INFORMATION *)P) )
{
LABEL_3:
RegistryValue = -1073741823;
goto LABEL_21;
}
v8 = PiDevCfgResolveVariable(a1, (const WCHAR *)((char *)v7 + v7[2]), &v17);
RegistryValue = v8;
if( v8 < 0 )
goto LABEL_5;
ExFreePoolWithTag(v7, 0);
P = 0i64;
v9 = *((_DWORD *)v17 + 8);
if( !v9 )
goto LABEL_11;
if( v9 <= 2 )
{
LABEL_26:
v10 = (wchar_t *)*((_QWORD *)v17 + 5);
LABEL_12:
if( !v10 )
goto LABEL_17;
goto LABEL_13;
}
if( v9 != 4 )
{
if( v9 != 7 )
{
LABEL_11:
v10 = 0i64;
goto LABEL_12;
}
goto LABEL_26;
}
RtlStringCchPrintfW(pszDest, 0xBui64, (WCHAR *)L"%u");
if( v15 < 0 )
goto LABEL_17;
v10 = pszDest;
LABEL_13:
v11 = IopGetRegistryValue(a2, v10, 0i64, (KEY_VALUE_FULL_INFORMATION **)&P);
RegistryValue = v11;
if( v11 != -1073741772 )
{
if( v11 >= 0 )
{
v7 = (unsigned int *)P;
if( !PnpValidateRegistryString((KEY_VALUE_FULL_INFORMATION *)P) )
goto LABEL_3;
v12 = (const WCHAR *)((char *)v7 + v7[2]);
if( v12 )
goto LABEL_29;
goto LABEL_17;
}
LABEL_20:
v7 = (unsigned int *)P;
goto LABEL_21;
}
LABEL_17:
v13 = IopGetRegistryValue(a2, (PWCHAR)L"Default", 0i64, (KEY_VALUE_FULL_INFORMATION **)&P);
RegistryValue = v13;
if( v13 < 0 )
{
if( v13 == -1073741772 )
RegistryValue = -1073741823;
goto LABEL_20;
}
v7 = (unsigned int *)P;
if( !PnpValidateRegistryString((KEY_VALUE_FULL_INFORMATION *)P) )
goto LABEL_3;
v12 = (const WCHAR *)((char *)v7 + v7[2]);
LABEL_29:
v8 = PiDevCfgResolveVariable(a1, v12, (CHAR **)&v18);
RegistryValue = v8;
if( v8 >= 0 )
{
RegistryValue = PiDevCfgCopyVariableData(a3, v18);
goto LABEL_21;
}
LABEL_5:
if( v8 == -1073741772 )
goto LABEL_3;
LABEL_21:
if( v7 )
ExFreePoolWithTag(v7, 0);
return(unsigned int)RegistryValue;
}Referenced by:
No references.