Rémi Bernon : ntoskrnl.exe: Enforce path case in WM_DEVICECHANGE notifications.

Alexandre Julliard julliard at winehq.org
Fri Jan 28 14:29:32 CST 2022


Module: wine
Branch: master
Commit: c489356d0b5bf01f2a09f6df8f5a5b9b1894fb17
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=c489356d0b5bf01f2a09f6df8f5a5b9b1894fb17

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Fri Jan 28 10:02:32 2022 +0100

ntoskrnl.exe: Enforce path case in WM_DEVICECHANGE notifications.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/dinput/tests/hotplug.c | 2 --
 dlls/ntoskrnl.exe/pnp.c     | 8 +++++++-
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/dlls/dinput/tests/hotplug.c b/dlls/dinput/tests/hotplug.c
index 9993ce23c99..10aaeebcfd3 100644
--- a/dlls/dinput/tests/hotplug.c
+++ b/dlls/dinput/tests/hotplug.c
@@ -201,14 +201,12 @@ static LRESULT CALLBACK devnotify_wndproc( HWND hwnd, UINT msg, WPARAM wparam, L
             debugstr_guid( &iface->dbcc_classguid ) );
         ok( iface->dbcc_size >= offsetof( DEV_BROADCAST_DEVICEINTERFACE_W, dbcc_name[wcslen( iface->dbcc_name ) + 1] ),
             "got dbcc_size %u\n", iface->dbcc_size );
-        todo_wine
         ok( !wcsncmp( iface->dbcc_name, expect_prefix, wcslen( expect_prefix ) ),
             "got dbcc_name %s\n", debugstr_w(iface->dbcc_name) );
 
         upper_end = wcschr( iface->dbcc_name + wcslen( expect_prefix ), '#' );
         name_end = iface->dbcc_name + wcslen( iface->dbcc_name ) + 1;
         ok( !!upper_end, "got dbcc_name %s\n", debugstr_w(iface->dbcc_name) );
-        todo_wine
         ok( all_upper( iface->dbcc_name, upper_end ), "got dbcc_name %s\n", debugstr_w(iface->dbcc_name) );
         ok( all_lower( upper_end, name_end ), "got dbcc_name %s\n", debugstr_w(iface->dbcc_name) );
 
diff --git a/dlls/ntoskrnl.exe/pnp.c b/dlls/ntoskrnl.exe/pnp.c
index 8d3481b2a72..ee1402e0e49 100644
--- a/dlls/ntoskrnl.exe/pnp.c
+++ b/dlls/ntoskrnl.exe/pnp.c
@@ -698,11 +698,11 @@ NTSTATUS WINAPI IoSetDeviceInterfaceState( UNICODE_STRING *name, BOOLEAN enable
 
     size_t namelen = name->Length / sizeof(WCHAR);
     DEV_BROADCAST_DEVICEINTERFACE_W *broadcast;
+    WCHAR *path, *refstr, *p, *upper_end;
     struct device_interface *iface;
     HANDLE iface_key, control_key;
     OBJECT_ATTRIBUTES attr = {0};
     struct wine_rb_entry *entry;
-    WCHAR *path, *refstr, *p;
     UNICODE_STRING string;
     DWORD data = enable;
     NTSTATUS ret;
@@ -788,6 +788,12 @@ NTSTATUS WINAPI IoSetDeviceInterfaceState( UNICODE_STRING *name, BOOLEAN enable
         broadcast->dbcc_classguid  = iface->interface_class;
         lstrcpynW( broadcast->dbcc_name, name->Buffer, namelen + 1 );
         if (namelen > 1) broadcast->dbcc_name[1] = '\\';
+
+        upper_end = wcschr( broadcast->dbcc_name, '#' );
+        if (upper_end) upper_end = wcschr( upper_end + 1, '#' );
+        while (upper_end && upper_end-- != broadcast->dbcc_name)
+            *upper_end = towupper( *upper_end );
+
         send_devicechange( enable ? DBT_DEVICEARRIVAL : DBT_DEVICEREMOVECOMPLETE, broadcast, len );
         heap_free( broadcast );
     }




More information about the wine-cvs mailing list