mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 13:26:17 +00:00
- Fix IsValidLanguageGroup and EnumSystemLanguageGroups. +102 passed tests
svn path=/trunk/; revision=37574
This commit is contained in:
parent
0c2971975e
commit
257cd9125a
1 changed files with 21 additions and 78 deletions
|
@ -50,22 +50,8 @@ typedef struct
|
||||||
LONG_PTR param;
|
LONG_PTR param;
|
||||||
} ENUM_UILANG_CALLBACK;
|
} ENUM_UILANG_CALLBACK;
|
||||||
|
|
||||||
static const WCHAR szLocaleKeyName[] =
|
static const WCHAR szLocaleKeyName[] = L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\NLS\\Locale";
|
||||||
|
static const WCHAR szLangGroupsKeyName[] = L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\NLS\\Language Groups";
|
||||||
{
|
|
||||||
'M','a','c','h','i','n','e','\\','S','y','s','t','e','m','\\',
|
|
||||||
'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
|
|
||||||
'C','o','n','t','r','o','l','\\','N','l','s','\\','L','o','c','a','l','e',0
|
|
||||||
};
|
|
||||||
|
|
||||||
static const WCHAR szLangGroupsKeyName[] = {
|
|
||||||
'M','a','c','h','i','n','e','\\','S','y','s','t','e','m','\\',
|
|
||||||
'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
|
|
||||||
'C','o','n','t','r','o','l','\\','N','l','s','\\',
|
|
||||||
'L','a','n','g','u','a','g','e',' ','G','r','o','u','p','s',0
|
|
||||||
};
|
|
||||||
|
|
||||||
extern const unsigned int CollationTable[];
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* @implemented
|
* @implemented
|
||||||
|
@ -378,6 +364,8 @@ static BOOL NLS_GetLanguageGroupName(LGRPID lgrpid, LPWSTR szName, ULONG nameSiz
|
||||||
}
|
}
|
||||||
FreeResource( hResource );
|
FreeResource( hResource );
|
||||||
}
|
}
|
||||||
|
else DPRINT1("FindResourceExW() failed\n");
|
||||||
|
|
||||||
return bRet;
|
return bRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -753,7 +741,7 @@ static BOOL NLS_EnumSystemLanguageGroups(ENUMLANGUAGEGROUP_CALLBACKS *lpProcs)
|
||||||
|
|
||||||
if (!hKey)
|
if (!hKey)
|
||||||
{
|
{
|
||||||
DPRINT1("NLS_RegOpenKey() failed\n");
|
DPRINT1("NLS_RegOpenKey() failed, KeyName='%S'\n", szLangGroupsKeyName);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2291,82 +2279,37 @@ IsValidLanguageGroup(
|
||||||
DWORD dwFlags)
|
DWORD dwFlags)
|
||||||
{
|
{
|
||||||
static const WCHAR szFormat[] = { '%','x','\0' };
|
static const WCHAR szFormat[] = { '%','x','\0' };
|
||||||
UNICODE_STRING szNlsKeyName =
|
WCHAR szValueName[16], szValue[2];
|
||||||
RTL_CONSTANT_STRING(L"\\REGISTRY\\Machine\\System\\CurrentControlSet\\Control\\Nls");
|
|
||||||
UNICODE_STRING szLangGroupsKeyName =
|
|
||||||
RTL_CONSTANT_STRING(L"Language Groups");
|
|
||||||
const int MAX_VALUE_NAME = 16;
|
|
||||||
const int MAX_VALUE_SYMB = 128;
|
|
||||||
|
|
||||||
BOOL bNtQuery;
|
|
||||||
PKEY_VALUE_PARTIAL_INFORMATION kvpiInfo;
|
|
||||||
|
|
||||||
WCHAR szValueName[MAX_VALUE_NAME];
|
|
||||||
UNICODE_STRING ucsValueName;
|
|
||||||
DWORD dwRetSize;
|
|
||||||
PWSTR pwszValueData;
|
|
||||||
|
|
||||||
DWORD dwSize = sizeof(KEY_VALUE_PARTIAL_INFORMATION) + MAX_VALUE_SYMB * sizeof(WCHAR);
|
|
||||||
|
|
||||||
OBJECT_ATTRIBUTES oaAttr;
|
|
||||||
HANDLE hkey, hRootKey;
|
|
||||||
BOOL bSupported = FALSE, bInstalled = FALSE;
|
BOOL bSupported = FALSE, bInstalled = FALSE;
|
||||||
|
HANDLE hKey;
|
||||||
|
|
||||||
DPRINT("IsValidLanguageGroup() called\n");
|
|
||||||
|
|
||||||
kvpiInfo = RtlAllocateHeap(RtlGetProcessHeap(),
|
|
||||||
HEAP_ZERO_MEMORY,
|
|
||||||
dwSize);
|
|
||||||
|
|
||||||
switch (dwFlags)
|
switch (dwFlags)
|
||||||
{
|
{
|
||||||
case LGRPID_INSTALLED:
|
case LGRPID_INSTALLED:
|
||||||
case LGRPID_SUPPORTED:
|
case LGRPID_SUPPORTED:
|
||||||
|
|
||||||
InitializeObjectAttributes(&oaAttr, &szNlsKeyName, 0, 0, NULL);
|
hKey = NLS_RegOpenKey( 0, szLangGroupsKeyName );
|
||||||
if(NtOpenKey(&hRootKey, KEY_ALL_ACCESS, &oaAttr) != STATUS_SUCCESS) return FALSE;
|
|
||||||
|
|
||||||
InitializeObjectAttributes(&oaAttr, &szLangGroupsKeyName, 0, hRootKey, NULL);
|
swprintf( szValueName, szFormat, LanguageGroup );
|
||||||
if(NtOpenKey(&hkey, KEY_ALL_ACCESS, &oaAttr) != STATUS_SUCCESS) return FALSE;
|
|
||||||
|
|
||||||
if(hRootKey) NtClose(hRootKey);
|
if (NLS_RegGetDword( hKey, szValueName, (LPDWORD)szValue ))
|
||||||
|
{
|
||||||
|
bSupported = TRUE;
|
||||||
|
|
||||||
swprintf(szValueName, szFormat, (ULONG)LanguageGroup);
|
if (szValue[0] == '1')
|
||||||
RtlInitUnicodeString(&ucsValueName, szValueName);
|
bInstalled = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
bNtQuery = NtQueryValueKey(hkey,
|
if (hKey)
|
||||||
&ucsValueName,
|
NtClose( hKey );
|
||||||
KeyValuePartialInformation,
|
|
||||||
kvpiInfo,
|
|
||||||
dwSize,
|
|
||||||
&dwRetSize);
|
|
||||||
if(hkey) NtClose(hkey);
|
|
||||||
|
|
||||||
if(bNtQuery == STATUS_SUCCESS &&
|
|
||||||
kvpiInfo->DataLength == sizeof(DWORD))
|
|
||||||
{
|
|
||||||
pwszValueData = (PWSTR)&kvpiInfo->Data[0];
|
|
||||||
bSupported = TRUE;
|
|
||||||
if(pwszValueData[0] == L'1') bInstalled = TRUE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DPRINT("NtQueryValueKey() failed (Status %lx)\n", bNtQuery);
|
|
||||||
RtlFreeHeap(RtlGetProcessHeap(), 0, kvpiInfo);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
RtlFreeHeap(RtlGetProcessHeap(), 0, kvpiInfo);
|
if ((dwFlags == LGRPID_SUPPORTED && bSupported) ||
|
||||||
|
(dwFlags == LGRPID_INSTALLED && bInstalled))
|
||||||
if((dwFlags == LGRPID_SUPPORTED && bSupported) ||
|
|
||||||
(dwFlags == LGRPID_INSTALLED && bInstalled))
|
|
||||||
{
|
|
||||||
DPRINT("Language group is supported and installed\n");
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue