kernel32: Move system locale enumeration functions to kernelbase.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
stable
Alexandre Julliard 2019-10-04 21:48:32 +02:00
parent 8d25965e12
commit a7c190d35f
7 changed files with 617 additions and 837 deletions

View File

@ -403,7 +403,7 @@
@ stdcall EnumDateFormatsExW(ptr long long)
@ stdcall EnumDateFormatsW(ptr long long)
@ stdcall EnumLanguageGroupLocalesA(ptr long long ptr)
@ stdcall EnumLanguageGroupLocalesW(ptr long long ptr)
@ stdcall -import EnumLanguageGroupLocalesW(ptr long long ptr)
@ stdcall EnumResourceLanguagesA(long str str ptr long)
@ stdcall -import EnumResourceLanguagesExA(long str str ptr long long long)
@ stdcall -import EnumResourceLanguagesExW(long wstr wstr ptr long long long)
@ -417,19 +417,19 @@
@ stdcall -import EnumResourceTypesExW(long ptr long long long)
@ stdcall EnumResourceTypesW(long ptr long)
@ stdcall EnumSystemCodePagesA(ptr long)
@ stdcall EnumSystemCodePagesW(ptr long)
@ stdcall -import EnumSystemCodePagesW(ptr long)
@ stdcall EnumSystemFirmwareTables(long ptr long)
@ stdcall EnumSystemGeoID(long long ptr)
@ stdcall EnumSystemLanguageGroupsA(ptr long ptr)
@ stdcall EnumSystemLanguageGroupsW(ptr long ptr)
@ stdcall EnumSystemLocalesA(ptr long)
@ stdcall EnumSystemLocalesEx(ptr long long ptr)
@ stdcall EnumSystemLocalesW(ptr long)
@ stdcall -import EnumSystemLanguageGroupsW(ptr long ptr)
@ stdcall -import EnumSystemLocalesA(ptr long)
@ stdcall -import EnumSystemLocalesEx(ptr long long ptr)
@ stdcall -import EnumSystemLocalesW(ptr long)
@ stdcall EnumTimeFormatsA(ptr long long)
@ stdcall EnumTimeFormatsEx(ptr wstr long long)
@ stdcall EnumTimeFormatsW(ptr long long)
@ stdcall EnumUILanguagesA(ptr long long)
@ stdcall EnumUILanguagesW(ptr long long)
@ stdcall -import EnumUILanguagesW(ptr long long)
# @ stub EnumerateLocalComputerNamesA
# @ stub EnumerateLocalComputerNamesW
@ stdcall -arch=x86_64 EnterUmsSchedulingMode(ptr)
@ -990,7 +990,7 @@
# @ stub IsTimeZoneRedirectionEnabled
# @ stub IsValidCalDateTime
@ stdcall IsValidCodePage(long)
@ stdcall IsValidLanguageGroup(long long)
@ stdcall -import IsValidLanguageGroup(long long)
@ stdcall IsValidLocale(long long)
@ stdcall IsValidLocaleName(wstr)
# @ stub IsValidUILanguage

View File

@ -59,25 +59,20 @@ WINE_DEFAULT_DEBUG_CHANNEL(nls);
#define WC_FLAGSMASK (WC_DISCARDNS|WC_SEPCHARS|WC_DEFAULTCHAR|WC_ERR_INVALID_CHARS|\
WC_COMPOSITECHECK|WC_NO_BEST_FIT_CHARS)
extern BOOL WINAPI Internal_EnumLanguageGroupLocales( LANGGROUPLOCALE_ENUMPROCW proc, LGRPID id,
DWORD flags, LONG_PTR param, BOOL unicode );
extern BOOL WINAPI Internal_EnumSystemCodePages( CODEPAGE_ENUMPROCW proc, DWORD flags, BOOL unicode );
extern BOOL WINAPI Internal_EnumSystemLanguageGroups( LANGUAGEGROUP_ENUMPROCW proc, DWORD flags,
LONG_PTR param, BOOL unicode );
extern BOOL WINAPI Internal_EnumUILanguages( UILANGUAGE_ENUMPROCW proc, DWORD flags,
LONG_PTR param, BOOL unicode );
/* current code pages */
static const union cptable *ansi_cptable;
static const union cptable *oem_cptable;
static const union cptable *mac_cptable;
static const union cptable *unix_cptable; /* NULL if UTF8 */
static const WCHAR szLocaleKeyName[] = {
'\\','R','e','g','i','s','t','r','y','\\','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[] = {
'\\','R','e','g','i','s','t','r','y','\\','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
};
/* Charset to codepage map, sorted by name. */
static const struct charset_entry
{
@ -2115,58 +2110,10 @@ BOOL WINAPI GetCPInfoExW( UINT codepage, DWORD dwFlags, LPCPINFOEXW cpinfo )
/***********************************************************************
* EnumSystemCodePagesA (KERNEL32.@)
*
* Call a user defined function for every code page installed on the system.
*
* PARAMS
* lpfnCodePageEnum [I] User CODEPAGE_ENUMPROC to call with each found code page
* flags [I] Reserved, set to 0.
*
* RETURNS
* TRUE, If all code pages have been enumerated, or
* FALSE if lpfnCodePageEnum returned FALSE to stop the enumeration.
*/
BOOL WINAPI EnumSystemCodePagesA( CODEPAGE_ENUMPROCA lpfnCodePageEnum, DWORD flags )
BOOL WINAPI EnumSystemCodePagesA( CODEPAGE_ENUMPROCA proc, DWORD flags )
{
const union cptable *table;
char buffer[10];
int index = 0;
for (;;)
{
if (!(table = wine_cp_enum_table( index++ ))) break;
sprintf( buffer, "%d", table->info.codepage );
if (!lpfnCodePageEnum( buffer )) break;
}
return TRUE;
}
/***********************************************************************
* EnumSystemCodePagesW (KERNEL32.@)
*
* See EnumSystemCodePagesA.
*/
BOOL WINAPI EnumSystemCodePagesW( CODEPAGE_ENUMPROCW lpfnCodePageEnum, DWORD flags )
{
const union cptable *table;
WCHAR buffer[10], *p;
int page, index = 0;
for (;;)
{
if (!(table = wine_cp_enum_table( index++ ))) break;
p = buffer + ARRAY_SIZE( buffer );
*--p = 0;
page = table->info.codepage;
do
{
*--p = '0' + (page % 10);
page /= 10;
} while( page );
if (!lpfnCodePageEnum( p )) break;
}
return TRUE;
return Internal_EnumSystemCodePages( (CODEPAGE_ENUMPROCW)proc, flags, FALSE );
}
@ -2733,113 +2680,6 @@ BOOL WINAPI IsValidLocaleName( LPCWSTR locale )
return locale_name.matches > 0;
}
static BOOL CALLBACK enum_lang_proc_a( HMODULE hModule, LPCSTR type,
LPCSTR name, WORD LangID, LONG_PTR lParam )
{
LOCALE_ENUMPROCA lpfnLocaleEnum = (LOCALE_ENUMPROCA)lParam;
char buf[20];
sprintf(buf, "%08x", (UINT)LangID);
return lpfnLocaleEnum( buf );
}
static BOOL CALLBACK enum_lang_proc_w( HMODULE hModule, LPCWSTR type,
LPCWSTR name, WORD LangID, LONG_PTR lParam )
{
static const WCHAR formatW[] = {'%','0','8','x',0};
LOCALE_ENUMPROCW lpfnLocaleEnum = (LOCALE_ENUMPROCW)lParam;
WCHAR buf[20];
sprintfW( buf, formatW, (UINT)LangID );
return lpfnLocaleEnum( buf );
}
/******************************************************************************
* EnumSystemLocalesA (KERNEL32.@)
*
* Call a users function for each locale available on the system.
*
* PARAMS
* lpfnLocaleEnum [I] Callback function to call for each locale
* dwFlags [I] LOCALE_SUPPORTED=All supported, LOCALE_INSTALLED=Installed only
*
* RETURNS
* Success: TRUE.
* Failure: FALSE. Use GetLastError() to determine the cause.
*/
BOOL WINAPI EnumSystemLocalesA( LOCALE_ENUMPROCA lpfnLocaleEnum, DWORD dwFlags )
{
TRACE("(%p,%08x)\n", lpfnLocaleEnum, dwFlags);
EnumResourceLanguagesA( kernel32_handle, (LPSTR)RT_STRING,
(LPCSTR)LOCALE_ILANGUAGE, enum_lang_proc_a,
(LONG_PTR)lpfnLocaleEnum);
return TRUE;
}
/******************************************************************************
* EnumSystemLocalesW (KERNEL32.@)
*
* See EnumSystemLocalesA.
*/
BOOL WINAPI EnumSystemLocalesW( LOCALE_ENUMPROCW lpfnLocaleEnum, DWORD dwFlags )
{
TRACE("(%p,%08x)\n", lpfnLocaleEnum, dwFlags);
EnumResourceLanguagesW( kernel32_handle, (LPWSTR)RT_STRING,
(LPCWSTR)LOCALE_ILANGUAGE, enum_lang_proc_w,
(LONG_PTR)lpfnLocaleEnum);
return TRUE;
}
struct enum_locale_ex_data
{
LOCALE_ENUMPROCEX proc;
DWORD flags;
LPARAM lparam;
};
static BOOL CALLBACK enum_locale_ex_proc( HMODULE module, LPCWSTR type,
LPCWSTR name, WORD lang, LONG_PTR lparam )
{
struct enum_locale_ex_data *data = (struct enum_locale_ex_data *)lparam;
WCHAR buffer[256];
DWORD neutral;
unsigned int flags;
GetLocaleInfoW( MAKELCID( lang, SORT_DEFAULT ), LOCALE_SNAME | LOCALE_NOUSEROVERRIDE,
buffer, ARRAY_SIZE( buffer ));
if (!GetLocaleInfoW( MAKELCID( lang, SORT_DEFAULT ),
LOCALE_INEUTRAL | LOCALE_NOUSEROVERRIDE | LOCALE_RETURN_NUMBER,
(LPWSTR)&neutral, sizeof(neutral) / sizeof(WCHAR) ))
neutral = 0;
flags = LOCALE_WINDOWS;
flags |= neutral ? LOCALE_NEUTRALDATA : LOCALE_SPECIFICDATA;
if (data->flags && !(data->flags & flags)) return TRUE;
return data->proc( buffer, flags, data->lparam );
}
/******************************************************************************
* EnumSystemLocalesEx (KERNEL32.@)
*/
BOOL WINAPI EnumSystemLocalesEx( LOCALE_ENUMPROCEX proc, DWORD flags, LPARAM lparam, LPVOID reserved )
{
struct enum_locale_ex_data data;
if (reserved)
{
SetLastError( ERROR_INVALID_PARAMETER );
return FALSE;
}
data.proc = proc;
data.flags = flags;
data.lparam = lparam;
EnumResourceLanguagesW( kernel32_handle, (LPCWSTR)RT_STRING,
(LPCWSTR)MAKEINTRESOURCE((LOCALE_SNAME >> 4) + 1),
enum_locale_ex_proc, (LONG_PTR)&data );
return TRUE;
}
/******************************************************************************
* GetStringTypeW (KERNEL32.@)
*
@ -3894,437 +3734,21 @@ static HANDLE NLS_RegOpenKey(HANDLE hRootKey, LPCWSTR szKeyName)
return hkey;
}
static BOOL NLS_RegEnumValue(HANDLE hKey, UINT ulIndex,
LPWSTR szValueName, ULONG valueNameSize,
LPWSTR szValueData, ULONG valueDataSize)
{
BYTE buffer[80];
KEY_VALUE_FULL_INFORMATION *info = (KEY_VALUE_FULL_INFORMATION *)buffer;
DWORD dwLen;
if (NtEnumerateValueKey( hKey, ulIndex, KeyValueFullInformation,
buffer, sizeof(buffer), &dwLen ) != STATUS_SUCCESS ||
info->NameLength > valueNameSize ||
info->DataLength > valueDataSize)
{
return FALSE;
}
TRACE("info->Name %s info->DataLength %d\n", debugstr_w(info->Name), info->DataLength);
memcpy( szValueName, info->Name, info->NameLength);
szValueName[info->NameLength / sizeof(WCHAR)] = '\0';
memcpy( szValueData, buffer + info->DataOffset, info->DataLength );
szValueData[info->DataLength / sizeof(WCHAR)] = '\0';
TRACE("returning %s %s\n", debugstr_w(szValueName), debugstr_w(szValueData));
return TRUE;
}
static BOOL NLS_RegGetDword(HANDLE hKey, LPCWSTR szValueName, DWORD *lpVal)
{
BYTE buffer[128];
const KEY_VALUE_PARTIAL_INFORMATION *info = (KEY_VALUE_PARTIAL_INFORMATION *)buffer;
DWORD dwSize = sizeof(buffer);
UNICODE_STRING valueName;
RtlInitUnicodeString( &valueName, szValueName );
TRACE("%p, %s\n", hKey, debugstr_w(szValueName));
if (NtQueryValueKey( hKey, &valueName, KeyValuePartialInformation,
buffer, dwSize, &dwSize ) == STATUS_SUCCESS &&
info->DataLength == sizeof(DWORD))
{
memcpy(lpVal, info->Data, sizeof(DWORD));
return TRUE;
}
return FALSE;
}
static BOOL NLS_GetLanguageGroupName(LGRPID lgrpid, LPWSTR szName, ULONG nameSize)
{
LANGID langId;
LPCWSTR szResourceName = MAKEINTRESOURCEW(((lgrpid + 0x2000) >> 4) + 1);
HRSRC hResource;
BOOL bRet = FALSE;
/* FIXME: Is it correct to use the system default langid? */
langId = GetSystemDefaultLangID();
if (SUBLANGID(langId) == SUBLANG_NEUTRAL) langId = get_default_sublang( langId );
hResource = FindResourceExW( kernel32_handle, (LPWSTR)RT_STRING, szResourceName, langId );
if (hResource)
{
HGLOBAL hResDir = LoadResource( kernel32_handle, hResource );
if (hResDir)
{
ULONG iResourceIndex = lgrpid & 0xf;
LPCWSTR lpResEntry = LockResource( hResDir );
ULONG i;
for (i = 0; i < iResourceIndex; i++)
lpResEntry += *lpResEntry + 1;
if (*lpResEntry < nameSize)
{
memcpy( szName, lpResEntry + 1, *lpResEntry * sizeof(WCHAR) );
szName[*lpResEntry] = '\0';
bRet = TRUE;
}
}
FreeResource( hResource );
}
return bRet;
}
/* Callback function ptrs for EnumSystemLanguageGroupsA/W */
typedef struct
{
LANGUAGEGROUP_ENUMPROCA procA;
LANGUAGEGROUP_ENUMPROCW procW;
DWORD dwFlags;
LONG_PTR lParam;
} ENUMLANGUAGEGROUP_CALLBACKS;
/* Internal implementation of EnumSystemLanguageGroupsA/W */
static BOOL NLS_EnumSystemLanguageGroups(ENUMLANGUAGEGROUP_CALLBACKS *lpProcs)
{
WCHAR szNumber[10], szValue[4];
HANDLE hKey;
BOOL bContinue = TRUE;
ULONG ulIndex = 0;
if (!lpProcs)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
switch (lpProcs->dwFlags)
{
case 0:
/* Default to LGRPID_INSTALLED */
lpProcs->dwFlags = LGRPID_INSTALLED;
/* Fall through... */
case LGRPID_INSTALLED:
case LGRPID_SUPPORTED:
break;
default:
SetLastError(ERROR_INVALID_FLAGS);
return FALSE;
}
hKey = NLS_RegOpenKey( 0, szLangGroupsKeyName );
if (!hKey)
FIXME("NLS registry key not found. Please apply the default registry file 'wine.inf'\n");
while (bContinue)
{
if (NLS_RegEnumValue( hKey, ulIndex, szNumber, sizeof(szNumber),
szValue, sizeof(szValue) ))
{
BOOL bInstalled = szValue[0] == '1';
LGRPID lgrpid = strtoulW( szNumber, NULL, 16 );
TRACE("grpid %s (%sinstalled)\n", debugstr_w(szNumber),
bInstalled ? "" : "not ");
if (lpProcs->dwFlags == LGRPID_SUPPORTED || bInstalled)
{
WCHAR szGrpName[48];
if (!NLS_GetLanguageGroupName( lgrpid, szGrpName, ARRAY_SIZE( szGrpName )))
szGrpName[0] = '\0';
if (lpProcs->procW)
bContinue = lpProcs->procW( lgrpid, szNumber, szGrpName, lpProcs->dwFlags,
lpProcs->lParam );
else
{
char szNumberA[ARRAY_SIZE( szNumber )];
char szGrpNameA[48];
/* FIXME: MSDN doesn't say which code page the W->A translation uses,
* or whether the language names are ever localised. Assume CP_ACP.
*/
WideCharToMultiByte(CP_ACP, 0, szNumber, -1, szNumberA, sizeof(szNumberA), 0, 0);
WideCharToMultiByte(CP_ACP, 0, szGrpName, -1, szGrpNameA, sizeof(szGrpNameA), 0, 0);
bContinue = lpProcs->procA( lgrpid, szNumberA, szGrpNameA, lpProcs->dwFlags,
lpProcs->lParam );
}
}
ulIndex++;
}
else
bContinue = FALSE;
if (!bContinue)
break;
}
if (hKey)
NtClose( hKey );
return TRUE;
}
/******************************************************************************
* EnumSystemLanguageGroupsA (KERNEL32.@)
*
* Call a users function for each language group available on the system.
*
* PARAMS
* pLangGrpEnumProc [I] Callback function to call for each language group
* dwFlags [I] LGRPID_SUPPORTED=All Supported, LGRPID_INSTALLED=Installed only
* lParam [I] User parameter to pass to pLangGrpEnumProc
*
* RETURNS
* Success: TRUE.
* Failure: FALSE. Use GetLastError() to determine the cause.
*/
BOOL WINAPI EnumSystemLanguageGroupsA(LANGUAGEGROUP_ENUMPROCA pLangGrpEnumProc,
DWORD dwFlags, LONG_PTR lParam)
BOOL WINAPI EnumSystemLanguageGroupsA( LANGUAGEGROUP_ENUMPROCA proc, DWORD flags, LONG_PTR param )
{
ENUMLANGUAGEGROUP_CALLBACKS procs;
TRACE("(%p,0x%08X,0x%08lX)\n", pLangGrpEnumProc, dwFlags, lParam);
procs.procA = pLangGrpEnumProc;
procs.procW = NULL;
procs.dwFlags = dwFlags;
procs.lParam = lParam;
return NLS_EnumSystemLanguageGroups( pLangGrpEnumProc ? &procs : NULL);
}
/******************************************************************************
* EnumSystemLanguageGroupsW (KERNEL32.@)
*
* See EnumSystemLanguageGroupsA.
*/
BOOL WINAPI EnumSystemLanguageGroupsW(LANGUAGEGROUP_ENUMPROCW pLangGrpEnumProc,
DWORD dwFlags, LONG_PTR lParam)
{
ENUMLANGUAGEGROUP_CALLBACKS procs;
TRACE("(%p,0x%08X,0x%08lX)\n", pLangGrpEnumProc, dwFlags, lParam);
procs.procA = NULL;
procs.procW = pLangGrpEnumProc;
procs.dwFlags = dwFlags;
procs.lParam = lParam;
return NLS_EnumSystemLanguageGroups( pLangGrpEnumProc ? &procs : NULL);
}
/******************************************************************************
* IsValidLanguageGroup (KERNEL32.@)
*
* Determine if a language group is supported and/or installed.
*
* PARAMS
* lgrpid [I] Language Group Id (LGRPID_ values from "winnls.h")
* dwFlags [I] LGRPID_SUPPORTED=Supported, LGRPID_INSTALLED=Installed
*
* RETURNS
* TRUE, if lgrpid is supported and/or installed, according to dwFlags.
* FALSE otherwise.
*/
BOOL WINAPI IsValidLanguageGroup(LGRPID lgrpid, DWORD dwFlags)
{
static const WCHAR szFormat[] = { '%','x','\0' };
WCHAR szValueName[16], szValue[2];
BOOL bSupported = FALSE, bInstalled = FALSE;
HANDLE hKey;
switch (dwFlags)
{
case LGRPID_INSTALLED:
case LGRPID_SUPPORTED:
hKey = NLS_RegOpenKey( 0, szLangGroupsKeyName );
sprintfW( szValueName, szFormat, lgrpid );
if (NLS_RegGetDword( hKey, szValueName, (LPDWORD)szValue ))
{
bSupported = TRUE;
if (szValue[0] == '1')
bInstalled = TRUE;
}
if (hKey)
NtClose( hKey );
break;
}
if ((dwFlags == LGRPID_SUPPORTED && bSupported) ||
(dwFlags == LGRPID_INSTALLED && bInstalled))
return TRUE;
return FALSE;
}
/* Callback function ptrs for EnumLanguageGrouplocalesA/W */
typedef struct
{
LANGGROUPLOCALE_ENUMPROCA procA;
LANGGROUPLOCALE_ENUMPROCW procW;
DWORD dwFlags;
LGRPID lgrpid;
LONG_PTR lParam;
} ENUMLANGUAGEGROUPLOCALE_CALLBACKS;
/* Internal implementation of EnumLanguageGrouplocalesA/W */
static BOOL NLS_EnumLanguageGroupLocales(ENUMLANGUAGEGROUPLOCALE_CALLBACKS *lpProcs)
{
static const WCHAR szAlternateSortsKeyName[] = {
'A','l','t','e','r','n','a','t','e',' ','S','o','r','t','s','\0'
};
WCHAR szNumber[10], szValue[4];
HANDLE hKey;
BOOL bContinue = TRUE, bAlternate = FALSE;
LGRPID lgrpid;
ULONG ulIndex = 1; /* Ignore default entry of 1st key */
if (!lpProcs || !lpProcs->lgrpid || lpProcs->lgrpid > LGRPID_ARMENIAN)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if (lpProcs->dwFlags)
{
SetLastError(ERROR_INVALID_FLAGS);
return FALSE;
}
hKey = NLS_RegOpenKey( 0, szLocaleKeyName );
if (!hKey)
WARN("NLS registry key not found. Please apply the default registry file 'wine.inf'\n");
while (bContinue)
{
if (NLS_RegEnumValue( hKey, ulIndex, szNumber, sizeof(szNumber),
szValue, sizeof(szValue) ))
{
lgrpid = strtoulW( szValue, NULL, 16 );
TRACE("lcid %s, grpid %d (%smatched)\n", debugstr_w(szNumber),
lgrpid, lgrpid == lpProcs->lgrpid ? "" : "not ");
if (lgrpid == lpProcs->lgrpid)
{
LCID lcid;
lcid = strtoulW( szNumber, NULL, 16 );
/* FIXME: native returns extra text for a few (17/150) locales, e.g:
* '00000437 ;Georgian'
* At present we only pass the LCID string.
*/
if (lpProcs->procW)
bContinue = lpProcs->procW( lgrpid, lcid, szNumber, lpProcs->lParam );
else
{
char szNumberA[ARRAY_SIZE( szNumber )];
WideCharToMultiByte(CP_ACP, 0, szNumber, -1, szNumberA, sizeof(szNumberA), 0, 0);
bContinue = lpProcs->procA( lgrpid, lcid, szNumberA, lpProcs->lParam );
}
}
ulIndex++;
}
else
{
/* Finished enumerating this key */
if (!bAlternate)
{
/* Enumerate alternate sorts also */
hKey = NLS_RegOpenKey( hKey, szAlternateSortsKeyName );
bAlternate = TRUE;
ulIndex = 0;
}
else
bContinue = FALSE; /* Finished both keys */
}
if (!bContinue)
break;
}
if (hKey)
NtClose( hKey );
return TRUE;
return Internal_EnumSystemLanguageGroups( (LANGUAGEGROUP_ENUMPROCW)proc, flags, param, FALSE );
}
/******************************************************************************
* EnumLanguageGroupLocalesA (KERNEL32.@)
*
* Call a users function for every locale in a language group available on the system.
*
* PARAMS
* pLangGrpLcEnumProc [I] Callback function to call for each locale
* lgrpid [I] Language group (LGRPID_ values from "winnls.h")
* dwFlags [I] Reserved, set to 0
* lParam [I] User parameter to pass to pLangGrpLcEnumProc
*
* RETURNS
* Success: TRUE.
* Failure: FALSE. Use GetLastError() to determine the cause.
*/
BOOL WINAPI EnumLanguageGroupLocalesA(LANGGROUPLOCALE_ENUMPROCA pLangGrpLcEnumProc,
LGRPID lgrpid, DWORD dwFlags, LONG_PTR lParam)
BOOL WINAPI EnumLanguageGroupLocalesA( LANGGROUPLOCALE_ENUMPROCA proc, LGRPID id,
DWORD flags, LONG_PTR param )
{
ENUMLANGUAGEGROUPLOCALE_CALLBACKS callbacks;
TRACE("(%p,0x%08X,0x%08X,0x%08lX)\n", pLangGrpLcEnumProc, lgrpid, dwFlags, lParam);
callbacks.procA = pLangGrpLcEnumProc;
callbacks.procW = NULL;
callbacks.dwFlags = dwFlags;
callbacks.lgrpid = lgrpid;
callbacks.lParam = lParam;
return NLS_EnumLanguageGroupLocales( pLangGrpLcEnumProc ? &callbacks : NULL );
}
/******************************************************************************
* EnumLanguageGroupLocalesW (KERNEL32.@)
*
* See EnumLanguageGroupLocalesA.
*/
BOOL WINAPI EnumLanguageGroupLocalesW(LANGGROUPLOCALE_ENUMPROCW pLangGrpLcEnumProc,
LGRPID lgrpid, DWORD dwFlags, LONG_PTR lParam)
{
ENUMLANGUAGEGROUPLOCALE_CALLBACKS callbacks;
TRACE("(%p,0x%08X,0x%08X,0x%08lX)\n", pLangGrpLcEnumProc, lgrpid, dwFlags, lParam);
callbacks.procA = NULL;
callbacks.procW = pLangGrpLcEnumProc;
callbacks.dwFlags = dwFlags;
callbacks.lgrpid = lgrpid;
callbacks.lParam = lParam;
return NLS_EnumLanguageGroupLocales( pLangGrpLcEnumProc ? &callbacks : NULL );
return Internal_EnumLanguageGroupLocales( (LANGGROUPLOCALE_ENUMPROCW)proc, id, flags, param, FALSE );
}
/******************************************************************************
@ -4420,94 +3844,14 @@ BOOL WINAPI SetUserGeoID( GEOID GeoID )
return TRUE;
}
typedef struct
{
union
{
UILANGUAGE_ENUMPROCA procA;
UILANGUAGE_ENUMPROCW procW;
} u;
DWORD flags;
LONG_PTR param;
} ENUM_UILANG_CALLBACK;
static BOOL CALLBACK enum_uilang_proc_a( HMODULE hModule, LPCSTR type,
LPCSTR name, WORD LangID, LONG_PTR lParam )
{
ENUM_UILANG_CALLBACK *enum_uilang = (ENUM_UILANG_CALLBACK *)lParam;
char buf[20];
sprintf(buf, "%08x", (UINT)LangID);
return enum_uilang->u.procA( buf, enum_uilang->param );
}
static BOOL CALLBACK enum_uilang_proc_w( HMODULE hModule, LPCWSTR type,
LPCWSTR name, WORD LangID, LONG_PTR lParam )
{
static const WCHAR formatW[] = {'%','0','8','x',0};
ENUM_UILANG_CALLBACK *enum_uilang = (ENUM_UILANG_CALLBACK *)lParam;
WCHAR buf[20];
sprintfW( buf, formatW, (UINT)LangID );
return enum_uilang->u.procW( buf, enum_uilang->param );
}
/******************************************************************************
* EnumUILanguagesA (KERNEL32.@)
*/
BOOL WINAPI EnumUILanguagesA(UILANGUAGE_ENUMPROCA pUILangEnumProc, DWORD dwFlags, LONG_PTR lParam)
BOOL WINAPI EnumUILanguagesA( UILANGUAGE_ENUMPROCA proc, DWORD flags, LONG_PTR param )
{
ENUM_UILANG_CALLBACK enum_uilang;
TRACE("%p, %x, %lx\n", pUILangEnumProc, dwFlags, lParam);
if(!pUILangEnumProc) {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if(dwFlags & ~MUI_LANGUAGE_ID) {
SetLastError(ERROR_INVALID_FLAGS);
return FALSE;
}
enum_uilang.u.procA = pUILangEnumProc;
enum_uilang.flags = dwFlags;
enum_uilang.param = lParam;
EnumResourceLanguagesA( kernel32_handle, (LPCSTR)RT_STRING,
(LPCSTR)LOCALE_ILANGUAGE, enum_uilang_proc_a,
(LONG_PTR)&enum_uilang);
return TRUE;
return Internal_EnumUILanguages( (UILANGUAGE_ENUMPROCW)proc, flags, param, FALSE );
}
/******************************************************************************
* EnumUILanguagesW (KERNEL32.@)
*/
BOOL WINAPI EnumUILanguagesW(UILANGUAGE_ENUMPROCW pUILangEnumProc, DWORD dwFlags, LONG_PTR lParam)
{
ENUM_UILANG_CALLBACK enum_uilang;
TRACE("%p, %x, %lx\n", pUILangEnumProc, dwFlags, lParam);
if(!pUILangEnumProc) {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if(dwFlags & ~MUI_LANGUAGE_ID) {
SetLastError(ERROR_INVALID_FLAGS);
return FALSE;
}
enum_uilang.u.procW = pUILangEnumProc;
enum_uilang.flags = dwFlags;
enum_uilang.param = lParam;
EnumResourceLanguagesW( kernel32_handle, (LPCWSTR)RT_STRING,
(LPCWSTR)LOCALE_ILANGUAGE, enum_uilang_proc_w,
(LONG_PTR)&enum_uilang);
return TRUE;
}
enum locationkind {
LOCATION_NATION = 0,

View File

@ -30,6 +30,7 @@ extern void init_startup_info( RTL_USER_PROCESS_PARAMETERS *params ) DECLSPEC_HI
extern const WCHAR windows_dir[] DECLSPEC_HIDDEN;
extern const WCHAR system_dir[] DECLSPEC_HIDDEN;
extern HANDLE kernel32_handle DECLSPEC_HIDDEN;
static inline BOOL is_console_handle(HANDLE h)
{

View File

@ -298,7 +298,7 @@
@ stdcall EnumDateFormatsW(ptr long long) kernel32.EnumDateFormatsW
# @ stub EnumDeviceDrivers
@ stdcall EnumDynamicTimeZoneInformation(long ptr)
@ stdcall EnumLanguageGroupLocalesW(ptr long long ptr) kernel32.EnumLanguageGroupLocalesW
@ stdcall EnumLanguageGroupLocalesW(ptr long long ptr)
# @ stub EnumPageFilesA
# @ stub EnumPageFilesW
# @ stub EnumProcessModules
@ -311,16 +311,16 @@
@ stdcall EnumResourceNamesW(long wstr ptr long)
@ stdcall EnumResourceTypesExA(long ptr long long long)
@ stdcall EnumResourceTypesExW(long ptr long long long)
@ stdcall EnumSystemCodePagesW(ptr long) kernel32.EnumSystemCodePagesW
@ stdcall EnumSystemCodePagesW(ptr long)
@ stdcall EnumSystemFirmwareTables(long ptr long) kernel32.EnumSystemFirmwareTables
@ stdcall EnumSystemGeoID(long long ptr) kernel32.EnumSystemGeoID
@ stdcall EnumSystemLanguageGroupsW(ptr long ptr) kernel32.EnumSystemLanguageGroupsW
@ stdcall EnumSystemLocalesA(ptr long) kernel32.EnumSystemLocalesA
@ stdcall EnumSystemLocalesEx(ptr long long ptr) kernel32.EnumSystemLocalesEx
@ stdcall EnumSystemLocalesW(ptr long) kernel32.EnumSystemLocalesW
@ stdcall EnumSystemLanguageGroupsW(ptr long ptr)
@ stdcall EnumSystemLocalesA(ptr long)
@ stdcall EnumSystemLocalesEx(ptr long long ptr)
@ stdcall EnumSystemLocalesW(ptr long)
@ stdcall EnumTimeFormatsEx(ptr wstr long long) kernel32.EnumTimeFormatsEx
@ stdcall EnumTimeFormatsW(ptr long long) kernel32.EnumTimeFormatsW
@ stdcall EnumUILanguagesW(ptr long long) kernel32.EnumUILanguagesW
@ stdcall EnumUILanguagesW(ptr long long)
# @ stub EnumerateStateAtomValues
# @ stub EnumerateStateContainerItems
@ stub EqualDomainSid
@ -826,12 +826,12 @@
@ stub InternalLcidToName
@ stub Internal_EnumCalendarInfo
@ stub Internal_EnumDateFormats
@ stub Internal_EnumLanguageGroupLocales
@ stub Internal_EnumSystemCodePages
@ stub Internal_EnumSystemLanguageGroups
@ stdcall Internal_EnumLanguageGroupLocales(ptr long long ptr long)
@ stdcall Internal_EnumSystemCodePages(ptr long long)
@ stdcall Internal_EnumSystemLanguageGroups(ptr long ptr long)
@ stub Internal_EnumSystemLocales
@ stub Internal_EnumTimeFormats
@ stub Internal_EnumUILanguages
@ stdcall Internal_EnumUILanguages(ptr long long long)
# @ stub InternetTimeFromSystemTimeA
# @ stub InternetTimeFromSystemTimeW
# @ stub InternetTimeToSystemTimeA
@ -875,7 +875,7 @@
@ stdcall IsTokenRestricted(long)
@ stdcall IsValidAcl(ptr)
@ stdcall IsValidCodePage(long) kernel32.IsValidCodePage
@ stdcall IsValidLanguageGroup(long long) kernel32.IsValidLanguageGroup
@ stdcall IsValidLanguageGroup(long long)
@ stdcall IsValidLocale(long long) kernel32.IsValidLocale
@ stdcall IsValidLocaleName(wstr) kernel32.IsValidLocaleName
# @ stub IsValidNLSVersion

View File

@ -24,12 +24,15 @@
*/
#include <stdarg.h>
#include <stdlib.h>
#include "ntstatus.h"
#define WIN32_NO_STATUS
#include "windef.h"
#include "winbase.h"
#include "winreg.h"
#include "winnls.h"
#include "winuser.h"
#include "winternl.h"
#include "kernelbase.h"
#include "wine/debug.h"
@ -37,6 +40,198 @@
WINE_DEFAULT_DEBUG_CHANNEL(nls);
static const WCHAR codepages_key[] =
{ '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','\\','C','o','d','e','P','a','g','e',0};
static const WCHAR language_groups_key[] =
{ '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 };
static const WCHAR locales_key[] =
{ '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 altsort_key[] = {'A','l','t','e','r','n','a','t','e',' ','S','o','r','t','s',0};
/******************************************************************************
* Internal_EnumLanguageGroupLocales (kernelbase.@)
*/
BOOL WINAPI DECLSPEC_HOTPATCH Internal_EnumLanguageGroupLocales( LANGGROUPLOCALE_ENUMPROCW proc, LGRPID id,
DWORD flags, LONG_PTR param, BOOL unicode )
{
WCHAR name[10], value[10];
DWORD name_len, value_len, type, index = 0, alt = 0;
HKEY key, altkey;
LCID lcid;
if (!proc || id < LGRPID_WESTERN_EUROPE || id > LGRPID_ARMENIAN)
{
SetLastError( ERROR_INVALID_PARAMETER );
return FALSE;
}
if (RegOpenKeyExW( HKEY_LOCAL_MACHINE, locales_key, 0, KEY_READ, &key )) return FALSE;
if (RegOpenKeyExW( key, altsort_key, 0, KEY_READ, &altkey )) altkey = 0;
for (;;)
{
name_len = ARRAY_SIZE(name);
value_len = sizeof(value);
if (RegEnumValueW( alt ? altkey : key, index++, name, &name_len, NULL,
&type, (BYTE *)value, &value_len ))
{
if (alt++) break;
index = 0;
continue;
}
if (type != REG_SZ) continue;
if (id != wcstoul( value, NULL, 16 )) continue;
lcid = wcstoul( name, NULL, 16 );
if (!unicode)
{
char nameA[10];
WideCharToMultiByte( CP_ACP, 0, name, -1, nameA, sizeof(nameA), NULL, NULL );
if (!((LANGGROUPLOCALE_ENUMPROCA)proc)( id, lcid, nameA, param )) break;
}
else if (!proc( id, lcid, name, param )) break;
}
RegCloseKey( altkey );
RegCloseKey( key );
return TRUE;
}
/***********************************************************************
* Internal_EnumSystemCodePages (kernelbase.@)
*/
BOOL WINAPI DECLSPEC_HOTPATCH Internal_EnumSystemCodePages( CODEPAGE_ENUMPROCW proc, DWORD flags,
BOOL unicode )
{
WCHAR name[10];
DWORD name_len, type, index = 0;
HKEY key;
if (RegOpenKeyExW( HKEY_LOCAL_MACHINE, codepages_key, 0, KEY_READ, &key )) return FALSE;
for (;;)
{
name_len = ARRAY_SIZE(name);
if (RegEnumValueW( key, index++, name, &name_len, NULL, &type, NULL, NULL )) break;
if (type != REG_SZ) continue;
if (!wcstoul( name, NULL, 10 )) continue;
if (!unicode)
{
char nameA[10];
WideCharToMultiByte( CP_ACP, 0, name, -1, nameA, sizeof(nameA), NULL, NULL );
if (!((CODEPAGE_ENUMPROCA)proc)( nameA )) break;
}
else if (!proc( name )) break;
}
RegCloseKey( key );
return TRUE;
}
/******************************************************************************
* Internal_EnumSystemLanguageGroups (kernelbase.@)
*/
BOOL WINAPI DECLSPEC_HOTPATCH Internal_EnumSystemLanguageGroups( LANGUAGEGROUP_ENUMPROCW proc,
DWORD flags, LONG_PTR param, BOOL unicode )
{
WCHAR name[10], value[10], descr[80];
DWORD name_len, value_len, type, index = 0;
HKEY key;
LGRPID id;
if (!proc)
{
SetLastError( ERROR_INVALID_PARAMETER );
return FALSE;
}
switch (flags)
{
case 0:
flags = LGRPID_INSTALLED;
break;
case LGRPID_INSTALLED:
case LGRPID_SUPPORTED:
break;
default:
SetLastError( ERROR_INVALID_FLAGS );
return FALSE;
}
if (RegOpenKeyExW( HKEY_LOCAL_MACHINE, language_groups_key, 0, KEY_READ, &key )) return FALSE;
for (;;)
{
name_len = ARRAY_SIZE(name);
value_len = sizeof(value);
if (RegEnumValueW( key, index++, name, &name_len, NULL, &type, (BYTE *)value, &value_len )) break;
if (type != REG_SZ) continue;
id = wcstoul( name, NULL, 16 );
if (!(flags & LGRPID_SUPPORTED) && !wcstoul( value, NULL, 10 )) continue;
if (!LoadStringW( kernel32_handle, 0x2000 + id, descr, ARRAY_SIZE(descr) )) descr[0] = 0;
TRACE( "%p: %u %s %s %x %lx\n", proc, id, debugstr_w(name), debugstr_w(descr), flags, param );
if (!unicode)
{
char nameA[10], descrA[80];
WideCharToMultiByte( CP_ACP, 0, name, -1, nameA, sizeof(nameA), NULL, NULL );
WideCharToMultiByte( CP_ACP, 0, descr, -1, descrA, sizeof(descrA), NULL, NULL );
if (!((LANGUAGEGROUP_ENUMPROCA)proc)( id, nameA, descrA, flags, param )) break;
}
else if (!proc( id, name, descr, flags, param )) break;
}
RegCloseKey( key );
return TRUE;
}
/******************************************************************************
* Internal_EnumUILanguages (kernelbase.@)
*/
BOOL WINAPI DECLSPEC_HOTPATCH Internal_EnumUILanguages( UILANGUAGE_ENUMPROCW proc, DWORD flags,
LONG_PTR param, BOOL unicode )
{
WCHAR name[10];
DWORD name_len, type, index = 0;
HKEY key;
if (!proc)
{
SetLastError( ERROR_INVALID_PARAMETER );
return FALSE;
}
if (flags & ~MUI_LANGUAGE_ID)
{
SetLastError( ERROR_INVALID_FLAGS );
return FALSE;
}
if (RegOpenKeyExW( HKEY_LOCAL_MACHINE, locales_key, 0, KEY_READ, &key )) return FALSE;
for (;;)
{
name_len = ARRAY_SIZE(name);
if (RegEnumValueW( key, index++, name, &name_len, NULL, &type, NULL, NULL )) break;
if (type != REG_SZ) continue;
if (!wcstoul( name, NULL, 16 )) continue;
if (!unicode)
{
char nameA[10];
WideCharToMultiByte( CP_ACP, 0, name, -1, nameA, sizeof(nameA), NULL, NULL );
if (!((UILANGUAGE_ENUMPROCA)proc)( nameA, param )) break;
}
else if (!proc( name, param )) break;
}
RegCloseKey( key );
return TRUE;
}
/******************************************************************************
* CompareStringOrdinal (kernelbase.@)
*/
@ -60,6 +255,143 @@ INT WINAPI DECLSPEC_HOTPATCH CompareStringOrdinal( const WCHAR *str1, INT len1,
}
/******************************************************************************
* EnumLanguageGroupLocalesW (kernelbase.@)
*/
BOOL WINAPI DECLSPEC_HOTPATCH EnumLanguageGroupLocalesW( LANGGROUPLOCALE_ENUMPROCW proc, LGRPID id,
DWORD flags, LONG_PTR param )
{
return Internal_EnumLanguageGroupLocales( proc, id, flags, param, TRUE );
}
/******************************************************************************
* EnumUILanguagesW (kernelbase.@)
*/
BOOL WINAPI DECLSPEC_HOTPATCH EnumUILanguagesW( UILANGUAGE_ENUMPROCW proc, DWORD flags, LONG_PTR param )
{
return Internal_EnumUILanguages( proc, flags, param, TRUE );
}
/***********************************************************************
* EnumSystemCodePagesW (kernelbase.@)
*/
BOOL WINAPI DECLSPEC_HOTPATCH EnumSystemCodePagesW( CODEPAGE_ENUMPROCW proc, DWORD flags )
{
return Internal_EnumSystemCodePages( proc, flags, TRUE );
}
/******************************************************************************
* EnumSystemLanguageGroupsW (kernelbase.@)
*/
BOOL WINAPI DECLSPEC_HOTPATCH EnumSystemLanguageGroupsW( LANGUAGEGROUP_ENUMPROCW proc,
DWORD flags, LONG_PTR param )
{
return Internal_EnumSystemLanguageGroups( proc, flags, param, TRUE );
}
/******************************************************************************
* EnumSystemLocalesA (kernelbase.@)
*/
BOOL WINAPI DECLSPEC_HOTPATCH EnumSystemLocalesA( LOCALE_ENUMPROCA proc, DWORD flags )
{
char name[10];
DWORD name_len, type, index = 0;
HKEY key;
if (RegOpenKeyExW( HKEY_LOCAL_MACHINE, locales_key, 0, KEY_READ, &key )) return FALSE;
for (;;)
{
name_len = ARRAY_SIZE(name);
if (RegEnumValueA( key, index++, name, &name_len, NULL, &type, NULL, NULL )) break;
if (type != REG_SZ) continue;
if (!strtoul( name, NULL, 16 )) continue;
if (!proc( name )) break;
}
RegCloseKey( key );
return TRUE;
}
/******************************************************************************
* EnumSystemLocalesW (kernelbase.@)
*/
BOOL WINAPI DECLSPEC_HOTPATCH EnumSystemLocalesW( LOCALE_ENUMPROCW proc, DWORD flags )
{
WCHAR name[10];
DWORD name_len, type, index = 0;
HKEY key;
if (RegOpenKeyExW( HKEY_LOCAL_MACHINE, locales_key, 0, KEY_READ, &key )) return FALSE;
for (;;)
{
name_len = ARRAY_SIZE(name);
if (RegEnumValueW( key, index++, name, &name_len, NULL, &type, NULL, NULL )) break;
if (type != REG_SZ) continue;
if (!wcstoul( name, NULL, 16 )) continue;
if (!proc( name )) break;
}
RegCloseKey( key );
return TRUE;
}
/******************************************************************************
* EnumSystemLocalesEx (kernelbase.@)
*/
BOOL WINAPI DECLSPEC_HOTPATCH EnumSystemLocalesEx( LOCALE_ENUMPROCEX proc, DWORD wanted_flags,
LPARAM param, void *reserved )
{
WCHAR buffer[256], name[10];
DWORD name_len, type, neutral, flags, index = 0, alt = 0;
HKEY key, altkey;
LCID lcid;
if (reserved)
{
SetLastError( ERROR_INVALID_PARAMETER );
return FALSE;
}
if (RegOpenKeyExW( HKEY_LOCAL_MACHINE, locales_key, 0, KEY_READ, &key )) return FALSE;
if (RegOpenKeyExW( key, altsort_key, 0, KEY_READ, &altkey )) altkey = 0;
for (;;)
{
name_len = ARRAY_SIZE(name);
if (RegEnumValueW( alt ? altkey : key, index++, name, &name_len, NULL, &type, NULL, NULL ))
{
if (alt++) break;
index = 0;
continue;
}
if (type != REG_SZ) continue;
if (!(lcid = wcstoul( name, NULL, 16 ))) continue;
GetLocaleInfoW( lcid, LOCALE_SNAME | LOCALE_NOUSEROVERRIDE, buffer, ARRAY_SIZE( buffer ));
if (!GetLocaleInfoW( lcid, LOCALE_INEUTRAL | LOCALE_NOUSEROVERRIDE | LOCALE_RETURN_NUMBER,
(LPWSTR)&neutral, sizeof(neutral) / sizeof(WCHAR) ))
neutral = 0;
if (alt)
flags = LOCALE_ALTERNATE_SORTS;
else
flags = LOCALE_WINDOWS | (neutral ? LOCALE_NEUTRALDATA : LOCALE_SPECIFICDATA);
if (wanted_flags && !(flags & wanted_flags)) continue;
if (!proc( buffer, flags, param )) break;
}
RegCloseKey( altkey );
RegCloseKey( key );
return TRUE;
}
/******************************************************************************
* FindStringOrdinal (kernelbase.@)
*/
@ -103,6 +435,28 @@ INT WINAPI DECLSPEC_HOTPATCH FindStringOrdinal( DWORD flag, const WCHAR *src, IN
}
/******************************************************************************
* IsValidLanguageGroup (kernelbase.@)
*/
BOOL WINAPI DECLSPEC_HOTPATCH IsValidLanguageGroup( LGRPID id, DWORD flags )
{
static const WCHAR format[] = { '%','x',0 };
WCHAR name[10], value[10];
DWORD type, value_len = sizeof(value);
BOOL ret = FALSE;
HKEY key;
if (RegOpenKeyExW( HKEY_LOCAL_MACHINE, language_groups_key, 0, KEY_READ, &key )) return FALSE;
swprintf( name, ARRAY_SIZE(name), format, id );
if (!RegQueryValueExW( key, name, NULL, &type, (BYTE *)value, &value_len ) && type == REG_SZ)
ret = (flags & LGRPID_SUPPORTED) || wcstoul( value, NULL, 10 );
RegCloseKey( key );
return ret;
}
/***********************************************************************
* LCIDToLocaleName (kernelbase.@)
*/

View File

@ -34,6 +34,8 @@
WINE_DEFAULT_DEBUG_CHANNEL(kernelbase);
HANDLE kernel32_handle = 0;
/***********************************************************************
* DllMain
*/
@ -42,6 +44,7 @@ BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved )
if (reason == DLL_PROCESS_ATTACH)
{
DisableThreadLibraryCalls( hinst );
kernel32_handle = GetModuleHandleA( "kernel32.dll" );
init_startup_info( NtCurrentTeb()->Peb->ProcessParameters );
}
return TRUE;

View File

@ -716,150 +716,222 @@ HKLM,SOFTWARE\Microsoft\Active Setup\Installed Components\{6BF52A52-394A-11d3-B1
HKLM,SOFTWARE\Microsoft\Active Setup\Installed Components\{6BF52A52-394A-11d3-B153-00C04F79FAA6},"Version",2,"12,0,7601,18840"
[Nls]
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"37",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0401",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0402",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0403",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0404",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0405",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0406",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0407",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0408",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0409",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"040a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"040b",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"040c",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"040d",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"040e",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"040f",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0410",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0411",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0412",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0413",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0414",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0415",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0416",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0418",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0419",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"041a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"041b",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"041c",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"041d",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"041e",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"041f",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0420",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0421",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0422",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0423",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0424",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0425",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0426",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0427",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0429",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"042a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"042b",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"042c",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"042d",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"042f",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0436",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0437",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0438",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0439",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"043e",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"043f",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0440",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0441",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0443",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0444",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0446",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0447",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0449",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"044a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"044b",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"044e",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"044f",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0450",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0452",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0456",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0457",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"045a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0465",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"047e",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"048f",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0490",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0491",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0494",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0801",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0804",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0807",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0809",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"080a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"080c",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0810",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0813",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0814",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0816",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"081a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"081d",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"082c",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"083e",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0843",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0894",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0c01",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0c04",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0c07",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0c09",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0c0a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0c0c",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0c1a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"0c94",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"1001",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"1004",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"1007",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"1009",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"100a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"100c",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"1401",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"1404",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"1407",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"1409",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"140a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"140c",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"1801",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"1809",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"180a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"180c",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"1c01",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"1c09",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"1c0a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"2001",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"2009",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"200a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"2401",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"2409",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"240a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"2801",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"2809",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"280a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"2c01",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"2c09",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"2c0a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"3001",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"3009",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"300a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"3401",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"3409",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"340a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"3801",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"380a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"3c01",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"3c0a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"4001",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"400a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"440a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"480a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"4c0a",,""
HKLM,System\CurrentControlSet\Control\Nls\Language,"500a",,""
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"37",,"c_037.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"424",,"c_424.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"437",,"c_437.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"500",,"c_500.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"737",,"c_737.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"775",,"c_775.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"850",,"c_850.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"852",,"c_852.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"855",,"c_855.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"856",,"c_856.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"857",,"c_857.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"860",,"c_860.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"861",,"c_861.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"862",,"c_862.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"863",,"c_863.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"864",,"c_864.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"865",,"c_865.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"866",,"c_866.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"869",,"c_869.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"874",,"c_874.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"875",,"c_875.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"878",,"c_878.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"932",,"c_932.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"936",,"c_936.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"949",,"c_949.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"950",,"c_950.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"1006",,"c_1006.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"1026",,"c_1026.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"1250",,"c_1250.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"1251",,"c_1251.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"1252",,"c_1252.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"1253",,"c_1253.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"1254",,"c_1254.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"1255",,"c_1255.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"1256",,"c_1256.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"1257",,"c_1257.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"1258",,"c_1258.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"1361",,"c_1361.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"10000",,"c_10000.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"10001",,"c_10001.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"10002",,"c_10002.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"10003",,"c_10003.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"10004",,"c_10004.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"10005",,"c_10005.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"10006",,"c_10006.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"10007",,"c_10007.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"10008",,"c_10008.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"10010",,"c_10010.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"10017",,"c_10017.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"10021",,"c_10021.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"10029",,"c_10029.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"10079",,"c_10079.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"10081",,"c_10081.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"10082",,"c_10082.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"20127",,"c_20127.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"20866",,"c_20866.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"20932",,"c_20932.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"21866",,"c_21866.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"28591",,"c_28591.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"28592",,"c_28592.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"28593",,"c_28593.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"28594",,"c_28594.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"28595",,"c_28595.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"28596",,"c_28596.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"28597",,"c_28597.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"28598",,"c_28598.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"28599",,"c_28599.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"28600",,"c_28600.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"28603",,"c_28603.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"28604",,"c_28604.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"28605",,"c_28605.nls"
HKLM,System\CurrentControlSet\Control\Nls\Codepage,"28606",,"c_28606.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0401",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0402",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0403",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0404",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0405",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0406",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0407",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0408",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0409",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"040a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"040b",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"040c",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"040d",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"040e",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"040f",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0410",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0411",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0412",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0413",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0414",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0415",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0416",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0418",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0419",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"041a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"041b",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"041c",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"041d",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"041e",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"041f",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0420",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0421",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0422",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0423",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0424",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0425",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0426",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0427",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0429",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"042a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"042b",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"042c",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"042d",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"042f",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0436",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0437",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0438",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0439",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"043e",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"043f",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0440",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0441",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0443",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0444",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0446",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0447",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0449",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"044a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"044b",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"044e",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"044f",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0450",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0452",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0456",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0457",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"045a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0465",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"047e",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"048f",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0490",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0491",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0494",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0801",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0804",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0807",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0809",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"080a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"080c",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0810",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0813",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0814",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0816",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"081a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"081d",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"082c",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"083e",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0843",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0894",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0c01",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0c04",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0c07",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0c09",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0c0a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0c0c",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0c1a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"0c94",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"1001",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"1004",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"1007",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"1009",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"100a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"100c",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"1401",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"1404",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"1407",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"1409",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"140a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"140c",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"1801",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"1809",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"180a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"180c",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"1c01",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"1c09",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"1c0a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"2001",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"2009",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"200a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"2401",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"2409",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"240a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"2801",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"2809",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"280a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"2c01",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"2c09",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"2c0a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"3001",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"3009",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"300a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"3401",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"3409",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"340a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"3801",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"380a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"3c01",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"3c0a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"4001",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"400a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"440a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"480a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"4c0a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"500a",,"l_intl.nls"
HKLM,System\CurrentControlSet\Control\Nls\Language,"Default",,"0409"
HKLM,System\CurrentControlSet\Control\Nls\Language,"InstallLanguage",,"0409"
@ -904,6 +976,7 @@ HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000413",,"1"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000414",,"1"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000415",,"2"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000416",,"1"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000417",,"1"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000418",,"2"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000419",,"5"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"0000041a",,"2"
@ -936,6 +1009,7 @@ HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000440",,"5"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000441",,"1"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000443",,"6"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000444",,"5"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000445",,"f"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000446",,"f"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000447",,"f"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000449",,"f"
@ -948,6 +1022,8 @@ HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000452",,"1"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000456",,"1"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000457",,"f"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"0000045a",,"d"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"0000045b",,"f"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000461",,"f"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000465",,"d"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"0000047e",,"1"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"0000048f",,"1"
@ -955,6 +1031,7 @@ HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000490",,"1"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000491",,"1"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000492",,"1"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000494",,"1"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"000004a5",,"1"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000801",,"d"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000804",,"a"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000807",,"1"
@ -977,6 +1054,7 @@ HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000c07",,"1"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000c09",,"1"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000c0a",,"1"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000c0c",,"1"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000c13",,"1"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00000c1a",,"5"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00001001",,"d"
HKLM,System\CurrentControlSet\Control\Nls\Locale,"00001004",,"a"