RtlpRemovePendingDeleteLanguages
NTSTATUS __stdcall RtlpRemovePendingDeleteLanguages(_MUIREGISTRYINFO *RegInfo, INT16 InstallLangIndex){
__int16 *v2;
UINT64 v5;
unsigned int v7;
NTSTATUS v8;
UINT8 v9;
unsigned __int64 v10;
__int64 v11;
UINT64 v12;
INT64 Length;
UINT64 Lengtha;
UINT64 *ResultLength;
INT64 v16;
INT64 v17;
INT16 ResultIndexRtrn[2];
v2 = (__int16 *)((unsigned __int64)ResultIndexRtrn & 0xFFFFFFFFFFFFFFE0ui64);
*((_QWORD *)v2 + 1) = 0i64;
*((_DWORD *)v2 + 1) = 0;
*v2 = -1;
*((_OWORD *)v2 + 1) = 0i64;
if( !RegInfo )
return -1073741811;
RtlInitUnicodeString(
(PUNICODE_STRING)v2 + 1,
L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\MUI\\UILanguages\\PendingDelete");
if( LdrpOpenKey((_UNICODE_STRING *)v2 + 1, 0i64, v5, (VOID **)v2 + 1, Length, (INT64)ResultLength, v16, v17) >= 0 )
{
v7 = 0;
do
{
LODWORD(Lengtha) = 512;
v8 = ZwEnumerateKey(
*(VOID **)(((unsigned __int64)ResultIndexRtrn & 0xFFFFFFFFFFFFFFE0ui64) + 8),
v7,
KeyBasicInformation,
v2 + 16,
Lengtha,
(UINT64 *)(v2 + 2));
if( v8 >= 0 )
{
v10 = *(unsigned int *)(((unsigned __int64)ResultIndexRtrn & 0xFFFFFFFFFFFFFFE0ui64) + 0x2C);
if( v10 + 24 < 0x1FE )
{
*(_WORD *)(((unsigned __int64)ResultIndexRtrn & 0xFFFFFFFFFFFFFFE0ui64) + 2 * (v10 >> 1) + 0x30) = 0;
if( RtlpMuiRegGetInstalledLanguageIndexByName(
RegInfo,
(const WCHAR *)v2 + 24,
v9,
(INT16 *)((unsigned __int64)ResultIndexRtrn & 0xFFFFFFFFFFFFFFE0ui64)) >= 0 )
{
v11 = *v2;
if( (_WORD)v11 != 0xFFFF && (_WORD)v11 != InstallLangIndex )
{
*(_WORD *)(28 * v11 + *(_QWORD *)(*((_QWORD *)RegInfo + 3) + 16i64)) &= ~0x20u;
*(_WORD *)(28i64 * *v2 + *(_QWORD *)(*((_QWORD *)RegInfo + 3) + 16i64)) |= 0x8000u;
}
}
}
}
++v7;
}
while( v8 != -2147483622 );
v12 = *(_QWORD *)(((unsigned __int64)ResultIndexRtrn & 0xFFFFFFFFFFFFFFE0ui64) + 8);
if( v12 )
NtClose(v12);
}
return 0;
}Referenced by:
RtlpMuiRegValidateInstalled