Get rid of the remaining registry configuration parameters.
diff --git a/documentation/samples/config b/documentation/samples/config
index 9b91a4e..dbe30f2 100644
--- a/documentation/samples/config
+++ b/documentation/samples/config
@@ -138,14 +138,6 @@
;"SnoopExclude" = "RtlEnterCriticalSection;RtlLeaveCriticalSection"
;"SpyExclude" = "WM_SIZE;WM_TIMER;"
-[registry]
-;These are all booleans. Y/y/T/t/1 are true, N/n/F/f/0 are false.
-;Defaults are read all, write to Home
-; Where to find the global registries
-;"GlobalRegistryDir" = "/etc";
-; Global registries (stored in /etc)
-"LoadGlobalRegistryFiles" = "Y"
-
[Clipboard]
"UsePrimary" = "0"
diff --git a/documentation/wine.conf.man b/documentation/wine.conf.man
index 4e819b0..c36696a 100644
--- a/documentation/wine.conf.man
+++ b/documentation/wine.conf.man
@@ -40,17 +40,6 @@
.PP
.B [wine]
.br
-.I format: """windows""=""<directory>"""
-.br
-default: "C:\\\\WINDOWS"
-.br
-Used to specify where Wine is supposed to have its Windows directory
-(which is an essential part of a Windows environment); make sure to double
-the backslashes.
-In case of e.g. C:\\WINDOWS, with drive C: being configured as
-/home/user/wine_c, the /home/user/wine_c/WINDOWS directory would be used for
-this.
-.PP
.I format: """GraphicsDriver""=""<x11drv|ttydrv>"""
.br
default: "x11drv"
@@ -202,28 +191,6 @@
For Relay and Snoop <dllname>.* includes or excludes the whole dll. Exclude
entries have priority over Include entries.
.PP
-.B [Registry]
-.br
-.I format: """LoadGlobalRegistryFiles""=""<boolean>"""
-.br
-Global registries (stored in /etc)
-.PP
-.I format: """LoadHomeRegistryFiles""=""<boolean>"""
-.br
-Home registries (stored in ~user/.wine/)
-.PP
-.I format: """WritetoHomeRegistryFiles""=""<boolean>"""
-.br
-TRY to write all changes to the home registry files
-.PP
-.I format: """LoadWindowsRegistryFiles""=""<boolean>"""
-.br
-Load Windows registry from the current Windows directory.
-.PP
-booleans: Y/y/T/t/1 are true, N/n/F/f/0 are false.
-.br
-Defaults are read all, write to home files.
-.PP
.B [Network]
.br
.I format: """UseDnsComputerName""=""<boolean>"""
diff --git a/misc/registry.c b/misc/registry.c
index 4b3ca4d..6afc440 100644
--- a/misc/registry.c
+++ b/misc/registry.c
@@ -67,21 +67,12 @@
WINE_DEFAULT_DEBUG_CHANNEL(reg);
-#define SAVE_GLOBAL_REGBRANCH_USER_DEFAULT "/wine.userreg"
-#define SAVE_GLOBAL_REGBRANCH_LOCAL_MACHINE "/wine.systemreg"
-
-#define MAX_PATHNAME_LEN 1024
-
-#define IS_OPTION_FALSE(ch) \
- ((ch) == 'n' || (ch) == 'N' || (ch) == 'f' || (ch) == 'F' || (ch) == '0')
-
-
/******************************************************************************
- * _allocate_default_keys [Internal]
+ * allocate_default_keys [Internal]
* Registry initialisation, allocates some default keys.
*/
-static void _allocate_default_keys(void)
+static ULONG allocate_default_keys(void)
{
static const WCHAR StatDataW[] = {'D','y','n','D','a','t','a','\\',
'P','e','r','f','S','t','a','t','s','\\',
@@ -93,11 +84,10 @@
'S','y','s','t','e','m','\\',
'C','l','o','n','e',0};
HKEY hkey;
+ ULONG dispos;
OBJECT_ATTRIBUTES attr;
UNICODE_STRING nameW;
- TRACE("(void)\n");
-
attr.Length = sizeof(attr);
attr.RootDirectory = 0;
attr.ObjectName = &nameW;
@@ -106,7 +96,9 @@
attr.SecurityQualityOfService = NULL;
RtlInitUnicodeString( &nameW, StatDataW );
- if (!NtCreateKey( &hkey, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL )) NtClose( hkey );
+ if (!NtCreateKey( &hkey, KEY_ALL_ACCESS, &attr, 0, NULL, 0, &dispos )) NtClose( hkey );
+ if (dispos == REG_OPENED_EXISTING_KEY)
+ return dispos; /* someone else already loaded the registry */
RtlInitUnicodeString( &nameW, ConfigManagerW );
if (!NtCreateKey( &hkey, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL )) NtClose( hkey );
@@ -114,45 +106,8 @@
/* this key is generated when the nt-core booted successfully */
RtlInitUnicodeString( &nameW, Clone );
if (!NtCreateKey( &hkey, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL )) NtClose( hkey );
-}
-
-
-/* load the registry file in wine format [Internal] */
-static void load_wine_registry(HKEY hkey,LPCSTR fn)
-{
- WCHAR *buffer;
- HANDLE file;
- DWORD len;
- UNICODE_STRING name;
- OBJECT_ATTRIBUTES attr;
- IO_STATUS_BLOCK io;
-
- len = MultiByteToWideChar( CP_UNIXCP, 0, fn, -1, NULL, 0 );
- if (!(buffer = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ))) return;
- MultiByteToWideChar( CP_UNIXCP, 0, fn, -1, buffer, len );
- RtlInitUnicodeString( &name, buffer );
-
- attr.Length = sizeof(attr);
- attr.RootDirectory = 0;
- attr.Attributes = 0;
- attr.ObjectName = &name;
- attr.SecurityDescriptor = NULL;
- attr.SecurityQualityOfService = NULL;
-
- if (!NtOpenFile( &file, GENERIC_READ, &attr, &io, FILE_SHARE_READ | FILE_SHARE_WRITE,
- FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT ))
- {
- SERVER_START_REQ( load_registry )
- {
- req->hkey = hkey;
- req->file = file;
- wine_server_call( req );
- }
- SERVER_END_REQ;
- CloseHandle( file );
- }
- HeapFree( GetProcessHeap(), 0, buffer );
+ return dispos;
}
@@ -501,25 +456,10 @@
/* load all registry (native and global and home) */
void SHELL_LoadRegistry( void )
{
- HKEY hkey_local_machine, hkey_users, hkey_users_default, hkey_current_user, hkey_config;
+ HKEY hkey_current_user;
OBJECT_ATTRIBUTES attr;
UNICODE_STRING nameW;
- DWORD count;
ULONG dispos;
- BOOL res;
- char tmp[1024];
-
- static const WCHAR MachineW[] = {'M','a','c','h','i','n','e',0};
- static const WCHAR UserW[] = {'U','s','e','r',0};
- static const WCHAR DefaultW[] = {'.','D','e','f','a','u','l','t',0};
- static const WCHAR RegistryW[] = {'M','a','c','h','i','n','e','\\',
- 'S','o','f','t','w','a','r','e','\\',
- 'W','i','n','e','\\',
- 'W','i','n','e','\\',
- 'C','o','n','f','i','g','\\',
- 'R','e','g','i','s','t','r','y',0};
- static const WCHAR load_global_reg_filesW[] = {'L','o','a','d','G','l','o','b','a','l','R','e','g','i','s','t','r','y','F','i','l','e','s',0};
- static const WCHAR GlobalRegistryDirW[] = {'G','l','o','b','a','l','R','e','g','i','s','t','r','y','D','i','r',0};
TRACE("(void)\n");
@@ -530,70 +470,12 @@
attr.SecurityDescriptor = NULL;
attr.SecurityQualityOfService = NULL;
- RtlInitUnicodeString( &nameW, UserW );
- NtCreateKey( &hkey_users, KEY_ALL_ACCESS, &attr, 0, NULL, 0, &dispos );
+ dispos = allocate_default_keys();
if (dispos == REG_OPENED_EXISTING_KEY)
- {
- /* someone else already loaded the registry */
- NtClose( hkey_users );
- return;
- }
+ return; /* someone else already loaded the registry */
- RtlInitUnicodeString( &nameW, MachineW );
- NtCreateKey( &hkey_local_machine, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL );
-
- attr.RootDirectory = hkey_users;
- RtlInitUnicodeString( &nameW, DefaultW );
- if (NtCreateKey( &hkey_users_default, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL ))
- {
- ERR("Cannot create HKEY_USERS/.Default\n" );
- ExitProcess(1);
- }
RtlOpenCurrentUser( KEY_ALL_ACCESS, &hkey_current_user );
- _allocate_default_keys();
-
- attr.RootDirectory = 0;
- RtlInitUnicodeString( &nameW, RegistryW );
- if (NtOpenKey( &hkey_config, KEY_ALL_ACCESS, &attr )) hkey_config = 0;
-
- /* load global registry if required */
-
- res = TRUE;
- RtlInitUnicodeString( &nameW, load_global_reg_filesW );
- if (!NtQueryValueKey( hkey_config, &nameW, KeyValuePartialInformation, tmp, sizeof(tmp), &count ))
- {
- WCHAR *str = (WCHAR *)((KEY_VALUE_PARTIAL_INFORMATION *)tmp)->Data;
- res = !IS_OPTION_FALSE(str[0]);
- }
- if (res)
- {
- /* load global registry files (stored in /etc/wine) */
- char *p, configfile[MAX_PATHNAME_LEN];
-
- /* Override ETCDIR? */
- configfile[0] = 0;
- RtlInitUnicodeString( &nameW, GlobalRegistryDirW );
- if (!NtQueryValueKey( hkey_config, &nameW, KeyValuePartialInformation, tmp, sizeof(tmp), &count ))
- {
- WCHAR *str = (WCHAR *)((KEY_VALUE_PARTIAL_INFORMATION *)tmp)->Data;
- RtlUnicodeToMultiByteN( configfile, sizeof(configfile), NULL,
- str, (strlenW(str) + 1) * sizeof(WCHAR));
- }
- if (configfile[0] != '/') strcpy(configfile, ETCDIR);
-
- TRACE("GlobalRegistryDir is '%s'.\n", configfile);
-
- /* Load the global HKU hive directly from sysconfdir */
- p = configfile + strlen(configfile);
- strcpy(p, SAVE_GLOBAL_REGBRANCH_USER_DEFAULT);
- load_wine_registry( hkey_users, configfile );
-
- /* Load the global machine defaults directly from sysconfdir */
- strcpy(p, SAVE_GLOBAL_REGBRANCH_LOCAL_MACHINE);
- load_wine_registry( hkey_local_machine, configfile );
- }
-
/* load home registries */
SERVER_START_REQ( load_user_registries )
@@ -612,9 +494,5 @@
convert_drive_types();
convert_environment( hkey_current_user );
- NtClose(hkey_users_default);
NtClose(hkey_current_user);
- NtClose(hkey_users);
- NtClose(hkey_local_machine);
- NtClose(hkey_config);
}