mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2024-09-13 09:17:20 -07:00
Rebase against a2c20d0e93290b3f998ad78c7aeaed8028aee2da.
This commit is contained in:
parent
320847e6f5
commit
bcf38efc5b
@ -1,7 +1,7 @@
|
||||
From 36b85f294e94ff58ba190d7b6606e34d64af1a31 Mon Sep 17 00:00:00 2001
|
||||
From e1f8622b3b787ca19ca1cfc149492c517e5833c4 Mon Sep 17 00:00:00 2001
|
||||
From: Paul Gofman <pgofman@codeweavers.com>
|
||||
Date: Tue, 20 Jun 2023 11:54:06 -0600
|
||||
Subject: [PATCH 2/3] ntdll: Implement NtFlushKey().
|
||||
Subject: [PATCH] ntdll: Implement NtFlushKey().
|
||||
|
||||
---
|
||||
dlls/ntdll/unix/registry.c | 155 +++++++++++++++++++++++++++++++++++--
|
||||
@ -10,7 +10,7 @@ Subject: [PATCH 2/3] ntdll: Implement NtFlushKey().
|
||||
3 files changed, 247 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/unix/registry.c b/dlls/ntdll/unix/registry.c
|
||||
index b63c7a66925..14b3ade3e6d 100644
|
||||
index 88ad7e569a1..492dd00d67a 100644
|
||||
--- a/dlls/ntdll/unix/registry.c
|
||||
+++ b/dlls/ntdll/unix/registry.c
|
||||
@@ -29,6 +29,8 @@
|
||||
@ -42,7 +42,7 @@ index b63c7a66925..14b3ade3e6d 100644
|
||||
}
|
||||
|
||||
|
||||
@@ -901,22 +904,162 @@ NTSTATUS WINAPI NtNotifyChangeKey( HANDLE key, HANDLE event, PIO_APC_ROUTINE apc
|
||||
@@ -916,22 +919,162 @@ NTSTATUS WINAPI NtNotifyChangeKey( HANDLE key, HANDLE event, PIO_APC_ROUTINE apc
|
||||
io, filter, subtree, buffer, length, async );
|
||||
}
|
||||
|
||||
@ -210,10 +210,10 @@ index b63c7a66925..14b3ade3e6d 100644
|
||||
}
|
||||
|
||||
diff --git a/server/protocol.def b/server/protocol.def
|
||||
index 12aa43a43e7..0e62f609459 100644
|
||||
index 1117e3b797a..910960285a0 100644
|
||||
--- a/server/protocol.def
|
||||
+++ b/server/protocol.def
|
||||
@@ -1818,6 +1818,18 @@ struct process_info
|
||||
@@ -1834,6 +1834,18 @@ struct process_info
|
||||
/* Flush a registry key */
|
||||
@REQ(flush_key)
|
||||
obj_handle_t hkey; /* handle to the key */
|
||||
@ -233,7 +233,7 @@ index 12aa43a43e7..0e62f609459 100644
|
||||
|
||||
|
||||
diff --git a/server/registry.c b/server/registry.c
|
||||
index 3365d4e9a4b..f6d57c579f4 100644
|
||||
index ec1ca27be80..6ec1202cf7a 100644
|
||||
--- a/server/registry.c
|
||||
+++ b/server/registry.c
|
||||
@@ -90,6 +90,7 @@ struct key
|
||||
@ -290,7 +290,7 @@ index 3365d4e9a4b..f6d57c579f4 100644
|
||||
}
|
||||
|
||||
/* go through all the notifications and send them if necessary */
|
||||
@@ -2004,6 +2010,7 @@ void init_registry(void)
|
||||
@@ -1995,6 +2001,7 @@ void init_registry(void)
|
||||
/* save a registry branch to a file */
|
||||
static void save_all_subkeys( struct key *key, FILE *f )
|
||||
{
|
||||
@ -298,16 +298,16 @@ index 3365d4e9a4b..f6d57c579f4 100644
|
||||
fprintf( f, "WINE REGISTRY Version 2\n" );
|
||||
fprintf( f, ";; All keys relative to " );
|
||||
dump_path( key, NULL, f );
|
||||
@@ -2192,7 +2199,7 @@ static int save_branch( struct key *key, const char *path )
|
||||
@@ -2179,7 +2186,7 @@ static int save_branch( struct key *key, const char *filename )
|
||||
}
|
||||
|
||||
done:
|
||||
free( tmp );
|
||||
- if (ret) make_clean( key );
|
||||
+ if (ret) make_clean( key, key->timestamp_counter );
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -2240,6 +2247,36 @@ static int is_wow64_thread( struct thread *thread )
|
||||
@@ -2227,6 +2234,36 @@ static int is_wow64_thread( struct thread *thread )
|
||||
return (is_machine_64bit( native_machine ) && !is_machine_64bit( thread->process->machine ));
|
||||
}
|
||||
|
||||
@ -344,7 +344,7 @@ index 3365d4e9a4b..f6d57c579f4 100644
|
||||
|
||||
/* create a registry key */
|
||||
DECL_HANDLER(create_key)
|
||||
@@ -2304,15 +2341,56 @@ DECL_HANDLER(delete_key)
|
||||
@@ -2291,15 +2328,56 @@ DECL_HANDLER(delete_key)
|
||||
}
|
||||
}
|
||||
|
||||
@ -372,7 +372,7 @@ index 3365d4e9a4b..f6d57c579f4 100644
|
||||
- release_object( key );
|
||||
+ if (!(save_branch_info[branches[i]].key->flags & KEY_DIRTY)) continue;
|
||||
+ ++reply->branch_count;
|
||||
+ path_len = strlen( save_branch_info[branches[i]].path ) + 1;
|
||||
+ path_len = strlen( save_branch_info[branches[i]].filename ) + 1;
|
||||
+ reply->total += sizeof(int) + sizeof(int) + path_len + save_registry( save_branch_info[branches[i]].key, NULL );
|
||||
+ }
|
||||
+ if (reply->total > get_reply_max_size())
|
||||
@ -388,10 +388,10 @@ index 3365d4e9a4b..f6d57c579f4 100644
|
||||
+ if (!(save_branch_info[branches[i]].key->flags & KEY_DIRTY)) continue;
|
||||
+ *(int *)data = branches[i];
|
||||
+ data += sizeof(int);
|
||||
+ path_len = strlen( save_branch_info[branches[i]].path ) + 1;
|
||||
+ path_len = strlen( save_branch_info[branches[i]].filename ) + 1;
|
||||
+ *(int *)data = path_len;
|
||||
+ data += sizeof(int);
|
||||
+ memcpy( data, save_branch_info[branches[i]].path, path_len );
|
||||
+ memcpy( data, save_branch_info[branches[i]].filename, path_len );
|
||||
+ data += path_len;
|
||||
+ data += save_registry( save_branch_info[branches[i]].key, data );
|
||||
+ }
|
||||
@ -406,5 +406,5 @@ index 3365d4e9a4b..f6d57c579f4 100644
|
||||
|
||||
/* enumerate registry subkeys */
|
||||
--
|
||||
2.40.1
|
||||
2.43.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 093f14e3ce1753ef399681ec2ccdeecb4443c7a1 Mon Sep 17 00:00:00 2001
|
||||
From 71559b3e6e2ba78682c3968a9837bf2fa6719830 Mon Sep 17 00:00:00 2001
|
||||
From: Paul Gofman <pgofman@codeweavers.com>
|
||||
Date: Tue, 20 Jun 2023 12:17:36 -0600
|
||||
Subject: [PATCH 3/3] mountmgr.sys: Perform periodic registry flush instead of
|
||||
Subject: [PATCH] mountmgr.sys: Perform periodic registry flush instead of
|
||||
server.
|
||||
|
||||
---
|
||||
@ -10,10 +10,10 @@ Subject: [PATCH 3/3] mountmgr.sys: Perform periodic registry flush instead of
|
||||
2 files changed, 22 insertions(+), 26 deletions(-)
|
||||
|
||||
diff --git a/dlls/mountmgr.sys/mountmgr.c b/dlls/mountmgr.sys/mountmgr.c
|
||||
index 1850051a258..ee8d282594f 100644
|
||||
index 52bc6536693..fecac943b41 100644
|
||||
--- a/dlls/mountmgr.sys/mountmgr.c
|
||||
+++ b/dlls/mountmgr.sys/mountmgr.c
|
||||
@@ -618,6 +618,27 @@ static DWORD WINAPI run_loop_thread( void *arg )
|
||||
@@ -616,6 +616,27 @@ static DWORD WINAPI run_loop_thread( void *arg )
|
||||
return MOUNTMGR_CALL( run_loop, ¶ms );
|
||||
}
|
||||
|
||||
@ -41,7 +41,7 @@ index 1850051a258..ee8d282594f 100644
|
||||
|
||||
/* main entry point for the mount point manager driver */
|
||||
NTSTATUS WINAPI DriverEntry( DRIVER_OBJECT *driver, UNICODE_STRING *path )
|
||||
@@ -661,6 +682,7 @@ NTSTATUS WINAPI DriverEntry( DRIVER_OBJECT *driver, UNICODE_STRING *path )
|
||||
@@ -659,6 +680,7 @@ NTSTATUS WINAPI DriverEntry( DRIVER_OBJECT *driver, UNICODE_STRING *path )
|
||||
|
||||
thread = CreateThread( NULL, 0, device_op_thread, NULL, 0, NULL );
|
||||
CloseHandle( CreateThread( NULL, 0, run_loop_thread, thread, 0, NULL ));
|
||||
@ -50,7 +50,7 @@ index 1850051a258..ee8d282594f 100644
|
||||
#ifdef _WIN64
|
||||
/* create a symlink so that the Wine port overrides key can be edited with 32-bit reg or regedit */
|
||||
diff --git a/server/registry.c b/server/registry.c
|
||||
index f6d57c579f4..21566057fa1 100644
|
||||
index 6ec1202cf7a..09badf44bcd 100644
|
||||
--- a/server/registry.c
|
||||
+++ b/server/registry.c
|
||||
@@ -125,15 +125,12 @@ static abstime_t change_timestamp_counter;
|
||||
@ -69,7 +69,7 @@ index f6d57c579f4..21566057fa1 100644
|
||||
static struct key_value *find_value( const struct key *key, const struct unicode_str *name, int *index );
|
||||
|
||||
/* information about where to save a registry branch */
|
||||
@@ -1983,9 +1980,6 @@ void init_registry(void)
|
||||
@@ -1976,9 +1973,6 @@ void init_registry(void)
|
||||
release_object( hklm );
|
||||
release_object( hkcu );
|
||||
|
||||
@ -79,7 +79,7 @@ index f6d57c579f4..21566057fa1 100644
|
||||
/* create windows directories */
|
||||
|
||||
if (!mkdir( "drive_c/windows", 0777 ))
|
||||
@@ -2203,26 +2197,6 @@ done:
|
||||
@@ -2190,26 +2184,6 @@ done:
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -91,7 +91,7 @@ index f6d57c579f4..21566057fa1 100644
|
||||
- if (fchdir( config_dir_fd ) == -1) return;
|
||||
- save_timeout_user = NULL;
|
||||
- for (i = 0; i < save_branch_count; i++)
|
||||
- save_branch( save_branch_info[i].key, save_branch_info[i].path );
|
||||
- save_branch( save_branch_info[i].key, save_branch_info[i].filename );
|
||||
- if (fchdir( server_dir_fd ) == -1) fatal_error( "chdir to server dir: %s\n", strerror( errno ));
|
||||
- set_periodic_save_timer();
|
||||
-}
|
||||
@ -107,5 +107,5 @@ index f6d57c579f4..21566057fa1 100644
|
||||
void flush_registry(void)
|
||||
{
|
||||
--
|
||||
2.40.1
|
||||
2.43.0
|
||||
|
||||
|
@ -1 +1 @@
|
||||
e01cb2b9156f808acc279a1b4753a48de0fda327
|
||||
a2c20d0e93290b3f998ad78c7aeaed8028aee2da
|
||||
|
Loading…
Reference in New Issue
Block a user