RtlpRemovePendingDeleteLanguages
__int64 __fastcall RtlpRemovePendingDeleteLanguages(__int64 a1, __int16 a2, WCHAR a3){
__int16 *v3;
UINT64 v6;
unsigned int v8;
NTSTATUS v9;
__int64 v10;
unsigned __int64 v11;
__int64 v12;
void *v13;
UINT64 Length;
__int16 v15[2];
v3 = (__int16 *)((unsigned __int64)v15 & 0xFFFFFFFFFFFFFFE0ui64);
*((_QWORD *)v3 + 1) = 0i64;
*((_DWORD *)v3 + 1) = 0;
*v3 = -1;
*((_OWORD *)v3 + 1) = 0i64;
if( !a1 )
return 3221225485i64;
RtlInitUnicodeString(
(PUNICODE_STRING)v3 + 1,
L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\MUI\\UILanguages\\PendingDelete",
a3);
if( (int)LdrpOpenKey((_UNICODE_STRING *)v3 + 1, 0i64, v6, (VOID **)v3 + 1) >= 0 )
{
v8 = 0;
do
{
LODWORD(Length) = 512;
v9 = ZwEnumerateKey(
*(VOID **)(((unsigned __int64)v15 & 0xFFFFFFFFFFFFFFE0ui64) + 8),
v8,
KeyBasicInformation,
v3 + 16,
Length,
(UINT64 *)(v3 + 2));
if( v9 >= 0 )
{
v11 = *(unsigned int *)(((unsigned __int64)v15 & 0xFFFFFFFFFFFFFFE0ui64) + 0x2C);
if( v11 + 24 < 0x1FE )
{
*(_WORD *)(((unsigned __int64)v15 & 0xFFFFFFFFFFFFFFE0ui64) + 2 * (v11 >> 1) + 0x30) = 0;
if( (int)RtlpMuiRegGetInstalledLanguageIndexByName(
a1,
(const wchar_t *)v3 + 24,
v10,
(_WORD *)((unsigned __int64)v15 & 0xFFFFFFFFFFFFFFE0ui64)) >= 0 )
{
v12 = *v3;
if( (_WORD)v12 != 0xFFFF && (_WORD)v12 != a2 )
{
*(_WORD *)(28 * v12 + *(_QWORD *)(*(_QWORD *)(a1 + 24) + 16i64)) &= ~0x20u;
*(_WORD *)(28i64 * *v3 + *(_QWORD *)(*(_QWORD *)(a1 + 24) + 16i64)) |= 0x8000u;
}
}
}
}
++v8;
}
while( v9 != -2147483622 );
v13 = *(void **)(((unsigned __int64)v15 & 0xFFFFFFFFFFFFFFE0ui64) + 8);
if( v13 )
NtClose(v13);
}
return 0i64;
}Referenced by:
RtlpMuiRegValidateInstalled