RtlpMuiRegLoadLicInformation
NTSTATUS __stdcall RtlpMuiRegLoadLicInformation(_MUIREGISTRYINFO *RegInfo){
_MUIREGISTRYINFO *v1;
VOID *v2;
VOID *v3;
_MUIREGISTRYINFO v4;
VOID *v5;
size_t v6;
size_t v7;
VOID **PoolWithTag;
const wchar_t *v9;
int v10;
WCHAR *v11;
WCHAR *v12;
size_t v13;
size_t v14;
VOID **v15;
int v16;
const wchar_t *v17;
WCHAR *v18;
WCHAR *v19;
size_t v20;
size_t v21;
VOID **v22;
int v23;
const wchar_t *v24;
WCHAR *v25;
WCHAR *v26;
NTSTATUS v27;
NTSTATUS result;
_MUIREGISTRYINFO v29;
int v30;
_MUIREGISTRYINFO v31;
int v32;
_MUIREGISTRYINFO v33;
int v34;
int v35;
int v36;
UINT8 *Value;
unsigned __int64 v38;
_UNICODE_STRING DestinationString[2];
UINT64 ValueSize;
UINT64 Lcid;
UINT64 Type;
v36 = -1;
LODWORD(Lcid) = 0;
LODWORD(Type) = 0;
v1 = RegInfo;
LODWORD(ValueSize) = 0;
v2 = 0i64;
Value = 0i64;
v3 = 0i64;
v31 = 0;
v4 = 0;
v29 = 0;
v5 = 0i64;
v33 = 0;
v35 = 0;
DestinationString[0] = 0i64;
if( !RegInfo )
{
v27 = -1073741811;
goto LABEL_58;
}
if( RtlpGetWindowsPolicy((WCHAR *)L"WindowsExcludedProcs", &Type, &ValueSize, &Value) >= 0 )
{
v35 = 1;
if( Value )
ExFreeHeapPool(Value);
Value = 0i64;
}
if( RtlpGetWindowsPolicy((WCHAR *)L"Kernel-MUI-Number-Allowed", &Type, &ValueSize, &Value) >= 0 )
{
v36 = *(_DWORD *)Value;
ExFreeHeapPool(Value);
Value = 0i64;
}
if( RtlpGetWindowsPolicy((WCHAR *)L"Kernel-MUI-Language-Allowed", &Type, &ValueSize, &Value) >= 0 )
{
v6 = ValueSize;
v32 = ValueSize + 4;
if( (_DWORD)ValueSize != -4 )
{
v7 = ValueSize + 4;
PoolWithTag = ExAllocatePoolWithTag(1ui64, (unsigned int)(ValueSize + 4), 1920232557i64);
v2 = PoolWithTag;
if( PoolWithTag )
memset(PoolWithTag, 0i64, v7);
v6 = ValueSize;
}
v38 = (unsigned __int64)v2;
if( !v2 )
{
v31 = 0;
goto LABEL_65;
}
memmove(v2, Value, v6);
v9 = (const wchar_t *)v2;
v10 = 0;
v11 = wcspbrk((WCHAR *)v2, (WCHAR *)L";");
LOWORD(v12) = 0;
if( v11 )
{
do
{
*v11 = 0;
RtlInitUnicodeString(DestinationString, v9);
if( RtlCultureNameToLCID(DestinationString, &Lcid) )
++v10;
v9 = v11 + 1;
v12 = wcspbrk(v11 + 1, (WCHAR *)L";");
v11 = v12;
}
while( v12 );
v1 = RegInfo;
}
if( *v9 != (_WORD)v12 )
{
RtlInitUnicodeString(DestinationString, v9);
if( RtlCultureNameToLCID(DestinationString, &Lcid) )
++v10;
}
if( !v10 )
ExFreeHeapPool(v2);
v31 = v10 != 0 ? v32 : 0;
v2 = (VOID *)(v38 & -(__int64)(v10 != 0));
if( Value )
ExFreeHeapPool(Value);
Value = 0i64;
v4 = 0;
}
if( RtlpGetWindowsPolicy((WCHAR *)L"Kernel-MUI-Language-Disallowed", &Type, &ValueSize, &Value) >= 0 )
{
v13 = ValueSize;
v30 = ValueSize + 4;
if( (_DWORD)ValueSize == -4 )
{
v3 = 0i64;
}
else
{
v14 = ValueSize + 4;
v15 = ExAllocatePoolWithTag(1ui64, (unsigned int)(ValueSize + 4), 1920232557i64);
v3 = v15;
if( v15 )
memset(v15, 0i64, v14);
v13 = ValueSize;
}
v38 = (unsigned __int64)v3;
if( !v3 )
{
v4 = 0;
goto LABEL_65;
}
memmove(v3, Value, v13);
v16 = 0;
v17 = (const wchar_t *)v3;
v18 = wcspbrk((WCHAR *)v3, (WCHAR *)L";");
LOWORD(v19) = 0;
if( v18 )
{
do
{
*v18 = 0;
RtlInitUnicodeString(DestinationString, v17);
if( RtlCultureNameToLCID(DestinationString, &Lcid) )
++v16;
v17 = v18 + 1;
v19 = wcspbrk(v18 + 1, (WCHAR *)L";");
v18 = v19;
}
while( v19 );
v1 = RegInfo;
}
if( *v17 != (_WORD)v19 )
{
RtlInitUnicodeString(DestinationString, v17);
if( RtlCultureNameToLCID(DestinationString, &Lcid) )
++v16;
}
if( !v16 )
ExFreeHeapPool(v3);
v4 = v16 != 0 ? v30 : 0;
v29 = v4;
v3 = (VOID *)(v38 & -(__int64)(v16 != 0));
if( Value )
ExFreeHeapPool(Value);
Value = 0i64;
}
if( RtlpGetWindowsPolicy((WCHAR *)L"Kernel-MUI-Language-SKU", &Type, &ValueSize, &Value) >= 0 )
{
v20 = ValueSize;
v34 = ValueSize + 4;
if( (_DWORD)ValueSize == -4 )
{
v5 = 0i64;
}
else
{
v21 = ValueSize + 4;
v22 = ExAllocatePoolWithTag(1ui64, (unsigned int)(ValueSize + 4), 1920232557i64);
v5 = v22;
if( v22 )
memset(v22, 0i64, v21);
v20 = ValueSize;
}
v38 = (unsigned __int64)v5;
if( v5 )
{
memmove(v5, Value, v20);
v23 = 0;
v24 = (const wchar_t *)v5;
v25 = wcspbrk((WCHAR *)v5, (WCHAR *)L";");
LOWORD(v26) = 0;
if( v25 )
{
do
{
*v25 = 0;
RtlInitUnicodeString(DestinationString, v24);
if( RtlCultureNameToLCID(DestinationString, &Lcid) )
++v23;
v24 = v25 + 1;
v26 = wcspbrk(v25 + 1, (WCHAR *)L";");
v25 = v26;
}
while( v26 );
v1 = RegInfo;
}
if( *v24 != (_WORD)v26 )
{
RtlInitUnicodeString(DestinationString, v24);
if( RtlCultureNameToLCID(DestinationString, &Lcid) )
++v23;
}
if( !v23 )
ExFreeHeapPool(v5);
v33 = v23 != 0 ? v34 : 0;
v5 = (VOID *)(v38 & -(__int64)(v23 != 0));
if( Value )
ExFreeHeapPool(Value);
v4 = v29;
Value = 0i64;
goto LABEL_54;
}
v33 = 0;
LABEL_65:
v27 = -1073741801;
goto LABEL_55;
}
LABEL_54:
v27 = 0;
LABEL_55:
if( Value )
ExFreeHeapPool(Value);
if( v2 && v3 )
{
ExFreeHeapPool(v3);
v3 = 0i64;
v4 = 0;
}
LABEL_58:
*v1 |= 0x800u;
v1[29] = v35;
v1[30] = v36;
v1[37] = v31;
v1[36] = v33;
result = v27;
*((_QWORD *)v1 + 16) = v2;
*((_QWORD *)v1 + 19) = v3;
v1[40] = v4;
*((_QWORD *)v1 + 17) = v5;
return result;
}Referenced by:
No references.