RtlpMuiRegInitLIPLanguage
__int64 __fastcall RtlpMuiRegInitLIPLanguage(__int64 a1, void *a2, _BYTE *a3){
unsigned __int64 v3;
unsigned int v7;
unsigned int v8;
WCHAR v9;
__int64 v10;
WCHAR v11;
int ValueKey;
int v13;
WCHAR v14;
unsigned __int64 v15;
UINT64 Length;
_LARGE_INTEGER *ResultLength;
_LARGE_INTEGER *ResultLengtha;
int v20;
v3 = (unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64;
*(_DWORD *)(v3 + 28) = 0;
v7 = 0;
v8 = 0;
*(_OWORD *)(v3 + 8) = 0i64;
memset(((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64) + 32, 0i64);
LODWORD(v10) = 0;
if( !a1 || !a2 || !a3 || (*a3 & 4) == 0 )
return 3221225485i64;
RtlInitUnicodeString((PUNICODE_STRING)(v3 + 8), L"DefaultFallback", v9);
*(_DWORD *)v3 = 1;
*(_DWORD *)(((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64) + 0x18) = 170;
if( (int)LdrpQueryValueKey(
a2,
(_UNICODE_STRING *)(v3 + 8),
(UINT64 *)((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64),
(VOID *)(v3 + 32),
(UINT64 *)(v3 + 24),
ResultLength) < 0
|| *(_DWORD *)v3 != 1 )
{
goto LABEL_29;
}
RtlInitUnicodeString((PUNICODE_STRING)(v3 + 8), (PCWSTR)(v3 + 32), v11);
*(_DWORD *)v3 = 7;
ValueKey = LdrpQueryValueKey(
a2,
(_UNICODE_STRING *)(v3 + 8),
(UINT64 *)((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64),
0i64,
0i64,
ResultLengtha);
v13 = ValueKey;
if( (!ValueKey || ValueKey == -2147483643)
&& (*(_DWORD *)v3 == 7 || *(_DWORD *)v3 == 1)
&& (int)RtlMuiRegAddLIPParent(a1, (__int64)a3, 0, (const WCHAR *)(v3 + 32)) >= 0 )
{
v7 = 1;
v10 = -1i64;
do
++v10;
while( *(_WORD *)(((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64) + 0x20 + 2 * v10) );
}
if( v13 != -2147483622 )
{
LABEL_29:
while( v7 < 4 )
{
LODWORD(Length) = 512;
if( ZwEnumerateValueKey(a2, v8, KeyValueFullInformation, (VOID *)(v3 + 224), Length, (UINT64 *)(v3 + 28)) < 0 )
break;
if( *(_DWORD *)(((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64) + 0xE4) == 7
|| *(_DWORD *)(((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64) + 0xE4) == 1 )
{
v15 = *(unsigned int *)(((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64) + 0xF0);
if( v15 + 24 <= 0x200 )
{
*(_WORD *)(((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64) + 2 * (v15 >> 1) + 0xF4) = 0;
RtlInitUnicodeString((PUNICODE_STRING)(v3 + 8), (PCWSTR)(v3 + 244), v14);
if( (!(_DWORD)v10
|| RtlCompareUnicodeStrings(
*(_QWORD *)(((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64) + 0x10),
(unsigned __int64)*(unsigned __int16 *)(((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64) + 8) >> 1,
v3 + 32))
&& (int)RtlMuiRegAddLIPParent(
a1,
(__int64)a3,
v7,
*(const WCHAR **)(((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64) + 0x10)) >= 0 )
{
++v7;
}
}
}
++v8;
}
}
return 0i64;
}Referenced by:
RtlpMuiRegAddLanguageByName