Rebase against a2c20d0e93290b3f998ad78c7aeaed8028aee2da.

This commit is contained in:
Alistair Leslie-Hughes 2024-03-29 19:31:59 +11:00
parent 320847e6f5
commit bcf38efc5b
3 changed files with 27 additions and 27 deletions

View File

@ -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

View File

@ -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, &params );
}
@ -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

View File

@ -1 +1 @@
e01cb2b9156f808acc279a1b4753a48de0fda327
a2c20d0e93290b3f998ad78c7aeaed8028aee2da