RtlpMuiRegInitLIPLanguage
__int64 __fastcall RtlpMuiRegInitLIPLanguage(_MUIREGISTRYINFO *RegInfo, VOID *KeyHandle, _BYTE *a3){
unsigned __int64 v3;
unsigned int v7;
unsigned int v8;
__int64 v9;
NTSTATUS ValueKey;
NTSTATUS v11;
unsigned __int64 v12;
UINT64 *KeyValueLength;
UINT64 KeyValueType;
v3 = (unsigned __int64)&KeyValueType & 0xFFFFFFFFFFFFFFE0ui64;
*(_DWORD *)(v3 + 28) = 0;
v7 = 0;
v8 = 0;
*(_OWORD *)(v3 + 8) = 0i64;
memset((VOID *)(((unsigned __int64)&KeyValueType & 0xFFFFFFFFFFFFFFE0ui64) + 32), 0i64, 0xAAu);
LODWORD(v9) = 0;
if( !RegInfo || !KeyHandle || !a3 || (*a3 & 4) == 0 )
return 3221225485i64;
RtlInitUnicodeString((PUNICODE_STRING)(v3 + 8), L"DefaultFallback");
*(_DWORD *)v3 = 1;
*(_DWORD *)(((unsigned __int64)&KeyValueType & 0xFFFFFFFFFFFFFFE0ui64) + 0x18) = 170;
if( LdrpQueryValueKey(
KeyHandle,
(_UNICODE_STRING *)(v3 + 8),
(UINT64 *)((unsigned __int64)&KeyValueType & 0xFFFFFFFFFFFFFFE0ui64),
(VOID *)(v3 + 32),
(UINT64 *)(v3 + 24)) < 0
|| *(_DWORD *)v3 != 1 )
{
goto LABEL_29;
}
RtlInitUnicodeString((PUNICODE_STRING)(v3 + 8), (PCWSTR)(v3 + 32));
*(_DWORD *)v3 = 7;
ValueKey = LdrpQueryValueKey(
KeyHandle,
(_UNICODE_STRING *)(v3 + 8),
(UINT64 *)((unsigned __int64)&KeyValueType & 0xFFFFFFFFFFFFFFE0ui64),
0i64,
0i64);
v11 = ValueKey;
if( (!ValueKey || ValueKey == -2147483643)
&& (*(_DWORD *)v3 == 7 || *(_DWORD *)v3 == 1)
&& (int)RtlMuiRegAddLIPParent(RegInfo, (__int64)a3, 0, (const WCHAR *)(v3 + 32)) >= 0 )
{
v7 = 1;
v9 = -1i64;
do
++v9;
while( *(_WORD *)(((unsigned __int64)&KeyValueType & 0xFFFFFFFFFFFFFFE0ui64) + 0x20 + 2 * v9) );
}
if( v11 != -2147483622 )
{
LABEL_29:
while( v7 < 4 )
{
LODWORD(KeyValueLength) = 512;
if( ZwEnumerateValueKey(
KeyHandle,
v8,
KeyValueFullInformation,
(VOID *)(v3 + 224),
(UINT64)KeyValueLength,
(UINT64 *)(v3 + 28)) < 0 )
break;
if( *(_DWORD *)(((unsigned __int64)&KeyValueType & 0xFFFFFFFFFFFFFFE0ui64) + 0xE4) == 7
|| *(_DWORD *)(((unsigned __int64)&KeyValueType & 0xFFFFFFFFFFFFFFE0ui64) + 0xE4) == 1 )
{
v12 = *(unsigned int *)(((unsigned __int64)&KeyValueType & 0xFFFFFFFFFFFFFFE0ui64) + 0xF0);
if( v12 + 24 <= 0x200 )
{
*(_WORD *)(((unsigned __int64)&KeyValueType & 0xFFFFFFFFFFFFFFE0ui64) + 2 * (v12 >> 1) + 0xF4) = 0;
RtlInitUnicodeString((PUNICODE_STRING)(v3 + 8), (PCWSTR)(v3 + 244));
if( (!(_DWORD)v9
|| RtlCompareUnicodeStrings(
*(WCHAR **)(((unsigned __int64)&KeyValueType & 0xFFFFFFFFFFFFFFE0ui64) + 0x10),
(unsigned __int64)*(unsigned __int16 *)(((unsigned __int64)&KeyValueType & 0xFFFFFFFFFFFFFFE0ui64) + 8) >> 1,
(WCHAR *)(v3 + 32),
(unsigned int)v9,
1u))
&& (int)RtlMuiRegAddLIPParent(
RegInfo,
(__int64)a3,
v7,
*(const WCHAR **)(((unsigned __int64)&KeyValueType & 0xFFFFFFFFFFFFFFE0ui64) + 0x10)) >= 0 )
{
++v7;
}
}
}
++v8;
}
}
return 0i64;
}Referenced by:
RtlpMuiRegAddLanguageByName