Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
58791c9a
Commit
58791c9a
authored
May 04, 2010
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
server: Store the prefix 32/64 architecture in the registry files.
parent
2de301d4
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
50 additions
and
4 deletions
+50
-4
registry.c
server/registry.c
+50
-4
No files found.
server/registry.c
View file @
58791c9a
...
...
@@ -109,6 +109,7 @@ static struct key *root_key;
static
const
timeout_t
ticks_1601_to_1970
=
(
timeout_t
)
86400
*
(
369
*
365
+
89
)
*
TICKS_PER_SEC
;
static
const
timeout_t
save_period
=
30
*
-
TICKS_PER_SEC
;
/* delay between periodic saves */
static
struct
timeout_user
*
save_timeout_user
;
/* saving timer */
static
enum
prefix_type
{
PREFIX_UNKNOWN
,
PREFIX_32BIT
,
PREFIX_64BIT
}
prefix_type
;
static
const
WCHAR
root_name
[]
=
{
'\\'
,
'R'
,
'e'
,
'g'
,
'i'
,
's'
,
't'
,
'r'
,
'y'
,
'\\'
};
static
const
WCHAR
wow6432node
[]
=
{
'W'
,
'o'
,
'w'
,
'6'
,
'4'
,
'3'
,
'2'
,
'N'
,
'o'
,
'd'
,
'e'
};
...
...
@@ -1305,6 +1306,35 @@ static struct key *load_key( struct key *base, const char *buffer,
return
create_key_recursive
(
base
,
&
name
,
modif
);
}
/* load a global option from the input file */
static
int
load_global_option
(
const
char
*
buffer
,
struct
file_load_info
*
info
)
{
const
char
*
p
;
if
(
!
strncmp
(
buffer
,
"#arch="
,
6
))
{
enum
prefix_type
type
;
p
=
buffer
+
6
;
if
(
!
strcmp
(
p
,
"win32"
))
type
=
PREFIX_32BIT
;
else
if
(
!
strcmp
(
p
,
"win64"
))
type
=
PREFIX_64BIT
;
else
{
file_read_error
(
"Unknown architecture"
,
info
);
set_error
(
STATUS_NOT_REGISTRY_FILE
);
return
0
;
}
if
(
prefix_type
==
PREFIX_UNKNOWN
)
prefix_type
=
type
;
else
if
(
type
!=
prefix_type
)
{
file_read_error
(
"Mismatched architecture"
,
info
);
set_error
(
STATUS_NOT_REGISTRY_FILE
);
return
0
;
}
}
/* ignore unknown options */
return
1
;
}
/* load a key option from the input file */
static
int
load_key_option
(
struct
key
*
key
,
const
char
*
buffer
,
struct
file_load_info
*
info
)
{
...
...
@@ -1525,6 +1555,7 @@ static void load_keys( struct key *key, const char *filename, FILE *f, int prefi
break
;
case
'#'
:
/* option */
if
(
subkey
)
load_key_option
(
subkey
,
p
,
&
info
);
else
if
(
!
load_global_option
(
p
,
&
info
))
goto
done
;
break
;
case
';'
:
/* comment */
case
0
:
/* empty line */
...
...
@@ -1563,7 +1594,7 @@ static void load_registry( struct key *key, obj_handle_t handle )
}
/* load one of the initial registry files */
static
void
load_init_registry_from_file
(
const
char
*
filename
,
struct
key
*
key
)
static
int
load_init_registry_from_file
(
const
char
*
filename
,
struct
key
*
key
)
{
FILE
*
f
;
...
...
@@ -1574,7 +1605,7 @@ static void load_init_registry_from_file( const char *filename, struct key *key
if
(
get_error
()
==
STATUS_NOT_REGISTRY_FILE
)
{
fprintf
(
stderr
,
"%s is not a valid registry file
\n
"
,
filename
);
return
;
return
1
;
}
}
...
...
@@ -1583,6 +1614,7 @@ static void load_init_registry_from_file( const char *filename, struct key *key
save_branch_info
[
save_branch_count
].
path
=
filename
;
save_branch_info
[
save_branch_count
++
].
key
=
(
struct
key
*
)
grab_object
(
key
);
make_object_static
(
&
key
->
obj
);
return
(
f
!=
NULL
);
}
static
WCHAR
*
format_user_registry_path
(
const
SID
*
sid
,
struct
unicode_str
*
path
)
...
...
@@ -1639,7 +1671,10 @@ void init_registry(void)
if
(
!
(
hklm
=
create_key_recursive
(
root_key
,
&
HKLM_name
,
current_time
)))
fatal_error
(
"could not create Machine registry key
\n
"
);
load_init_registry_from_file
(
"system.reg"
,
hklm
);
if
(
!
load_init_registry_from_file
(
"system.reg"
,
hklm
))
prefix_type
=
sizeof
(
void
*
)
>
sizeof
(
int
)
?
PREFIX_64BIT
:
PREFIX_32BIT
;
else
if
(
prefix_type
==
PREFIX_UNKNOWN
)
prefix_type
=
PREFIX_32BIT
;
/* load userdef.reg into Registry\User\.Default */
...
...
@@ -1660,7 +1695,7 @@ void init_registry(void)
load_init_registry_from_file
(
"user.reg"
,
hkcu
);
/* set the shared flag on Software\Classes\Wow6432Node */
if
(
sizeof
(
void
*
)
>
sizeof
(
int
)
)
if
(
prefix_type
==
PREFIX_64BIT
)
{
if
((
key
=
create_key_recursive
(
hklm
,
&
classes_name
,
current_time
)))
{
...
...
@@ -1687,6 +1722,17 @@ static void save_all_subkeys( struct key *key, FILE *f )
fprintf
(
f
,
";; All keys relative to "
);
dump_path
(
key
,
NULL
,
f
);
fprintf
(
f
,
"
\n
"
);
switch
(
prefix_type
)
{
case
PREFIX_32BIT
:
fprintf
(
f
,
"
\n
#arch=win32
\n
"
);
break
;
case
PREFIX_64BIT
:
fprintf
(
f
,
"
\n
#arch=win64
\n
"
);
break
;
default:
break
;
}
save_subkeys
(
key
,
key
,
f
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment