OpenGlobalizationUserSettingsKey_ForMua
__int64 __fastcall OpenGlobalizationUserSettingsKey_ForMua(__int64 a1, __int64 a2, VOID **a3, _DWORD *a4){
__int64 v4;
int v7;
UINT64 v8;
UINT64 v9;
_UNICODE_STRING *v10;
VOID **v11;
__int64 *v12;
NTSTATUS InformationToken;
unsigned __int8 v14;
unsigned __int16 v15;
wchar_t *v16;
wchar_t *v17;
INT64 v18;
INT64 v19;
UINT64 *ReturnLength;
UINT64 *ReturnLengtha;
INT64 a6;
INT64 a6a;
INT64 a6b;
INT64 a7;
INT64 a7a;
INT64 v28;
INT64 v29;
UINT64 v30;
_UNICODE_STRING Destination;
_UNICODE_STRING UnicodeString;
_OBJECT_ATTRIBUTES ObjectAttributes;
__int16 a5[264];
v4 = 0i64;
v7 = 0;
UnicodeString = 0i64;
memset(&ObjectAttributes, 0, sizeof(ObjectAttributes));
LODWORD(v8) = AllocateMemory(84);
v12 = (__int64 *)v8;
if( v8 )
{
LODWORD(v30) = 0;
InformationToken = ZwQueryInformationToken(0xFFFFFFFFFFFFFFFAui64, 1i64, v8, 0x54ui64, (UINT64)&v30);
if( InformationToken < 0 )
goto LABEL_26;
v4 = *v12;
}
else
{
InformationToken = -1073741801;
}
if( InformationToken >= 0 )
{
v14 = *(_BYTE *)(v4 + 1);
if( v14 < 2u || v14 == 5 && *(_DWORD *)(v4 + 8) == 21 && *(_DWORD *)(v4 + 24) == 503 )
{
*a4 = 0;
InformationToken = -1073741514;
v7 = 1;
}
if( InformationToken >= 0 )
{
InformationToken = RtlConvertSidToUnicodeString(&UnicodeString, (VOID *)v4, 1u);
if( InformationToken >= 0 )
{
LODWORD(v30) = 0;
LODWORD(a6) = 520;
InformationToken = RtlGetPersistedStateLocation(
(WCHAR *)L"GlobalizationUserSettings",
L"TargetNtPath",
L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\International",
0i64,
a5,
a6,
(INT64)&v30);
if( InformationToken >= 0 )
{
v15 = v30 + UnicodeString.Length + 4;
LODWORD(v16) = AllocateMemory(v15);
v17 = v16;
if( v16 )
{
*(_QWORD *)&Destination.Length = 0i64;
Destination.MaximumLength = v15;
Destination.Buffer = v16;
InformationToken = RtlAppendUnicodeToString(&Destination, (WCHAR *)a5);
if( InformationToken >= 0 )
{
InformationToken = RtlAppendUnicodeToString(&Destination, (WCHAR *)L"\\");
if( InformationToken >= 0 )
{
InformationToken = RtlAppendUnicodeStringToString(&Destination, &UnicodeString);
if( InformationToken >= 0 )
{
ObjectAttributes.RootDirectory = 0i64;
v30 = 0i64;
ObjectAttributes.ObjectName = &Destination;
ObjectAttributes.Length = 48;
ObjectAttributes.Attributes = 576;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
if( ZwOpenKey((VOID **)&v30, 0x20019ui64, &ObjectAttributes, v18, (INT64)ReturnLength, a6a, a7, v28) < 0 )
{
v7 = 1;
*a4 = 1;
}
else
{
ZwClose(v30);
*a4 = 2;
InformationToken = ZwOpenKey(a3, 8ui64, &ObjectAttributes, v19, (INT64)ReturnLengtha, a6b, a7a, v29);
}
}
}
}
ExFreeHeapPool(v17);
}
else
{
InformationToken = -1073741801;
}
}
RtlFreeAnsiString(&UnicodeString);
}
}
if( v7 )
InformationToken = OpenGlobalizationUserSettingsKey_ForSingleUserModel(v9, a3, v10, v11);
}
LABEL_26:
if( v12 )
ExFreeHeapPool(v12);
return(unsigned int)InformationToken;
}Referenced by:
OpenGlobalizationUserSettingsKey