Load the HKEY_CURRENT_USER branch at server startup too.
This commit is contained in:
parent
c33bd1b71b
commit
6aa0cc5e3c
|
@ -253,23 +253,9 @@ static void create_hardware_branch(void)
|
||||||
*/
|
*/
|
||||||
void convert_old_config(void)
|
void convert_old_config(void)
|
||||||
{
|
{
|
||||||
HANDLE hkey_current_user;
|
|
||||||
|
|
||||||
if (allocate_default_keys() == REG_OPENED_EXISTING_KEY)
|
if (allocate_default_keys() == REG_OPENED_EXISTING_KEY)
|
||||||
return; /* someone else already loaded the registry */
|
return; /* someone else already loaded the registry */
|
||||||
|
|
||||||
RtlOpenCurrentUser( KEY_ALL_ACCESS, &hkey_current_user );
|
|
||||||
|
|
||||||
/* load the user registry (FIXME: should be done at server init time) */
|
|
||||||
SERVER_START_REQ( load_user_registries )
|
|
||||||
{
|
|
||||||
req->hkey = hkey_current_user;
|
|
||||||
wine_server_call( req );
|
|
||||||
}
|
|
||||||
SERVER_END_REQ;
|
|
||||||
|
|
||||||
/* create some hardware keys (FIXME: should not be done here) */
|
/* create some hardware keys (FIXME: should not be done here) */
|
||||||
create_hardware_branch();
|
create_hardware_branch();
|
||||||
|
|
||||||
NtClose( hkey_current_user );
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1859,20 +1859,6 @@ struct save_registry_reply
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct load_user_registries_request
|
|
||||||
{
|
|
||||||
struct request_header __header;
|
|
||||||
obj_handle_t hkey;
|
|
||||||
int saving;
|
|
||||||
int period;
|
|
||||||
};
|
|
||||||
struct load_user_registries_reply
|
|
||||||
{
|
|
||||||
struct reply_header __header;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct set_registry_notification_request
|
struct set_registry_notification_request
|
||||||
{
|
{
|
||||||
struct request_header __header;
|
struct request_header __header;
|
||||||
|
@ -3677,7 +3663,6 @@ enum request
|
||||||
REQ_load_registry,
|
REQ_load_registry,
|
||||||
REQ_unload_registry,
|
REQ_unload_registry,
|
||||||
REQ_save_registry,
|
REQ_save_registry,
|
||||||
REQ_load_user_registries,
|
|
||||||
REQ_set_registry_notification,
|
REQ_set_registry_notification,
|
||||||
REQ_create_timer,
|
REQ_create_timer,
|
||||||
REQ_open_timer,
|
REQ_open_timer,
|
||||||
|
@ -3889,7 +3874,6 @@ union generic_request
|
||||||
struct load_registry_request load_registry_request;
|
struct load_registry_request load_registry_request;
|
||||||
struct unload_registry_request unload_registry_request;
|
struct unload_registry_request unload_registry_request;
|
||||||
struct save_registry_request save_registry_request;
|
struct save_registry_request save_registry_request;
|
||||||
struct load_user_registries_request load_user_registries_request;
|
|
||||||
struct set_registry_notification_request set_registry_notification_request;
|
struct set_registry_notification_request set_registry_notification_request;
|
||||||
struct create_timer_request create_timer_request;
|
struct create_timer_request create_timer_request;
|
||||||
struct open_timer_request open_timer_request;
|
struct open_timer_request open_timer_request;
|
||||||
|
@ -4099,7 +4083,6 @@ union generic_reply
|
||||||
struct load_registry_reply load_registry_reply;
|
struct load_registry_reply load_registry_reply;
|
||||||
struct unload_registry_reply unload_registry_reply;
|
struct unload_registry_reply unload_registry_reply;
|
||||||
struct save_registry_reply save_registry_reply;
|
struct save_registry_reply save_registry_reply;
|
||||||
struct load_user_registries_reply load_user_registries_reply;
|
|
||||||
struct set_registry_notification_reply set_registry_notification_reply;
|
struct set_registry_notification_reply set_registry_notification_reply;
|
||||||
struct create_timer_reply create_timer_reply;
|
struct create_timer_reply create_timer_reply;
|
||||||
struct open_timer_reply open_timer_reply;
|
struct open_timer_reply open_timer_reply;
|
||||||
|
@ -4206,6 +4189,6 @@ union generic_reply
|
||||||
struct set_mailslot_info_reply set_mailslot_info_reply;
|
struct set_mailslot_info_reply set_mailslot_info_reply;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define SERVER_PROTOCOL_VERSION 181
|
#define SERVER_PROTOCOL_VERSION 182
|
||||||
|
|
||||||
#endif /* __WINE_WINE_SERVER_PROTOCOL_H */
|
#endif /* __WINE_WINE_SERVER_PROTOCOL_H */
|
||||||
|
|
|
@ -1341,14 +1341,6 @@ enum char_info_mode
|
||||||
@END
|
@END
|
||||||
|
|
||||||
|
|
||||||
/* Load the user registry files */
|
|
||||||
@REQ(load_user_registries)
|
|
||||||
obj_handle_t hkey; /* key for HKCU */
|
|
||||||
int saving; /* new saving level */
|
|
||||||
int period; /* duration between periodic saves (milliseconds) */
|
|
||||||
@END
|
|
||||||
|
|
||||||
|
|
||||||
/* Add a registry key change notification */
|
/* Add a registry key change notification */
|
||||||
@REQ(set_registry_notification)
|
@REQ(set_registry_notification)
|
||||||
obj_handle_t hkey; /* key to watch for changes */
|
obj_handle_t hkey; /* key to watch for changes */
|
||||||
|
|
|
@ -1421,30 +1421,14 @@ static void load_init_registry_from_file( const char *filename, struct key *key
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* load the user registry files */
|
|
||||||
static void load_user_registries( struct key *key_current_user )
|
|
||||||
{
|
|
||||||
const char *config = wine_get_config_dir();
|
|
||||||
char *filename;
|
|
||||||
|
|
||||||
/* load user.reg into HKEY_CURRENT_USER */
|
|
||||||
|
|
||||||
if (!(filename = mem_alloc( strlen(config) + sizeof("/user.reg") ))) return;
|
|
||||||
strcpy( filename, config );
|
|
||||||
strcat( filename, "/user.reg" );
|
|
||||||
load_init_registry_from_file( filename, key_current_user );
|
|
||||||
free( filename );
|
|
||||||
|
|
||||||
/* start the periodic save timer */
|
|
||||||
set_periodic_save_timer();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* registry initialisation */
|
/* registry initialisation */
|
||||||
void init_registry(void)
|
void init_registry(void)
|
||||||
{
|
{
|
||||||
static const WCHAR root_name[] = { 0 };
|
static const WCHAR root_name[] = { 0 };
|
||||||
static const WCHAR HKLM[] = { 'M','a','c','h','i','n','e' };
|
static const WCHAR HKLM[] = { 'M','a','c','h','i','n','e' };
|
||||||
static const WCHAR HKU_default[] = { 'U','s','e','r','\\','.','D','e','f','a','u','l','t' };
|
static const WCHAR HKU_default[] = { 'U','s','e','r','\\','.','D','e','f','a','u','l','t' };
|
||||||
|
/* FIXME: hardcoded to match what NtQueryTokenInformation currently returns */
|
||||||
|
static const WCHAR HKCU[] = {'U','s','e','r','\\','S','-','1','-','5','-','4',0};
|
||||||
|
|
||||||
const char *config = wine_get_config_dir();
|
const char *config = wine_get_config_dir();
|
||||||
char *p, *filename;
|
char *p, *filename;
|
||||||
|
@ -1479,7 +1463,19 @@ void init_registry(void)
|
||||||
load_init_registry_from_file( filename, key );
|
load_init_registry_from_file( filename, key );
|
||||||
release_object( key );
|
release_object( key );
|
||||||
|
|
||||||
|
/* load user.reg into HKEY_CURRENT_USER */
|
||||||
|
|
||||||
|
if (!(key = create_key( root_key, copy_path( HKCU, sizeof(HKCU), 0 ),
|
||||||
|
NULL, 0, time(NULL), &dummy )))
|
||||||
|
fatal_error( "could not create HKEY_CURRENT_USER registry key\n" );
|
||||||
|
strcpy( p, "/user.reg" );
|
||||||
|
load_init_registry_from_file( filename, key );
|
||||||
|
release_object( key );
|
||||||
|
|
||||||
free( filename );
|
free( filename );
|
||||||
|
|
||||||
|
/* start the periodic save timer */
|
||||||
|
set_periodic_save_timer();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* save a registry branch to a file */
|
/* save a registry branch to a file */
|
||||||
|
@ -1894,18 +1890,6 @@ DECL_HANDLER(save_registry)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* load the user registry files */
|
|
||||||
DECL_HANDLER(load_user_registries)
|
|
||||||
{
|
|
||||||
struct key *key;
|
|
||||||
|
|
||||||
if ((key = get_hkey_obj( req->hkey, KEY_SET_VALUE | KEY_CREATE_SUB_KEY )))
|
|
||||||
{
|
|
||||||
load_user_registries( key );
|
|
||||||
release_object( key );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* add a registry key change notification */
|
/* add a registry key change notification */
|
||||||
DECL_HANDLER(set_registry_notification)
|
DECL_HANDLER(set_registry_notification)
|
||||||
{
|
{
|
||||||
|
|
|
@ -203,7 +203,6 @@ DECL_HANDLER(delete_key_value);
|
||||||
DECL_HANDLER(load_registry);
|
DECL_HANDLER(load_registry);
|
||||||
DECL_HANDLER(unload_registry);
|
DECL_HANDLER(unload_registry);
|
||||||
DECL_HANDLER(save_registry);
|
DECL_HANDLER(save_registry);
|
||||||
DECL_HANDLER(load_user_registries);
|
|
||||||
DECL_HANDLER(set_registry_notification);
|
DECL_HANDLER(set_registry_notification);
|
||||||
DECL_HANDLER(create_timer);
|
DECL_HANDLER(create_timer);
|
||||||
DECL_HANDLER(open_timer);
|
DECL_HANDLER(open_timer);
|
||||||
|
@ -414,7 +413,6 @@ static const req_handler req_handlers[REQ_NB_REQUESTS] =
|
||||||
(req_handler)req_load_registry,
|
(req_handler)req_load_registry,
|
||||||
(req_handler)req_unload_registry,
|
(req_handler)req_unload_registry,
|
||||||
(req_handler)req_save_registry,
|
(req_handler)req_save_registry,
|
||||||
(req_handler)req_load_user_registries,
|
|
||||||
(req_handler)req_set_registry_notification,
|
(req_handler)req_set_registry_notification,
|
||||||
(req_handler)req_create_timer,
|
(req_handler)req_create_timer,
|
||||||
(req_handler)req_open_timer,
|
(req_handler)req_open_timer,
|
||||||
|
|
|
@ -1770,13 +1770,6 @@ static void dump_save_registry_request( const struct save_registry_request *req
|
||||||
fprintf( stderr, " file=%p", req->file );
|
fprintf( stderr, " file=%p", req->file );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dump_load_user_registries_request( const struct load_user_registries_request *req )
|
|
||||||
{
|
|
||||||
fprintf( stderr, " hkey=%p,", req->hkey );
|
|
||||||
fprintf( stderr, " saving=%d,", req->saving );
|
|
||||||
fprintf( stderr, " period=%d", req->period );
|
|
||||||
}
|
|
||||||
|
|
||||||
static void dump_set_registry_notification_request( const struct set_registry_notification_request *req )
|
static void dump_set_registry_notification_request( const struct set_registry_notification_request *req )
|
||||||
{
|
{
|
||||||
fprintf( stderr, " hkey=%p,", req->hkey );
|
fprintf( stderr, " hkey=%p,", req->hkey );
|
||||||
|
@ -3175,7 +3168,6 @@ static const dump_func req_dumpers[REQ_NB_REQUESTS] = {
|
||||||
(dump_func)dump_load_registry_request,
|
(dump_func)dump_load_registry_request,
|
||||||
(dump_func)dump_unload_registry_request,
|
(dump_func)dump_unload_registry_request,
|
||||||
(dump_func)dump_save_registry_request,
|
(dump_func)dump_save_registry_request,
|
||||||
(dump_func)dump_load_user_registries_request,
|
|
||||||
(dump_func)dump_set_registry_notification_request,
|
(dump_func)dump_set_registry_notification_request,
|
||||||
(dump_func)dump_create_timer_request,
|
(dump_func)dump_create_timer_request,
|
||||||
(dump_func)dump_open_timer_request,
|
(dump_func)dump_open_timer_request,
|
||||||
|
@ -3384,7 +3376,6 @@ static const dump_func reply_dumpers[REQ_NB_REQUESTS] = {
|
||||||
(dump_func)0,
|
(dump_func)0,
|
||||||
(dump_func)0,
|
(dump_func)0,
|
||||||
(dump_func)0,
|
(dump_func)0,
|
||||||
(dump_func)0,
|
|
||||||
(dump_func)dump_create_timer_reply,
|
(dump_func)dump_create_timer_reply,
|
||||||
(dump_func)dump_open_timer_reply,
|
(dump_func)dump_open_timer_reply,
|
||||||
(dump_func)dump_set_timer_reply,
|
(dump_func)dump_set_timer_reply,
|
||||||
|
@ -3591,7 +3582,6 @@ static const char * const req_names[REQ_NB_REQUESTS] = {
|
||||||
"load_registry",
|
"load_registry",
|
||||||
"unload_registry",
|
"unload_registry",
|
||||||
"save_registry",
|
"save_registry",
|
||||||
"load_user_registries",
|
|
||||||
"set_registry_notification",
|
"set_registry_notification",
|
||||||
"create_timer",
|
"create_timer",
|
||||||
"open_timer",
|
"open_timer",
|
||||||
|
|
Loading…
Reference in New Issue