From: Twaik Yont <9674930+twaik@users.noreply.github.com> Following an earlier change, the \\.\WineAndroid path and the corresponding \??\WineAndroid symbolic link no longer resolved correctly. Open the WineAndroid device directly via \Device\WineAndroid, create the driver and device objects using explicit kernel object names, and update the ioctl path to match. Use RTL_CONSTANT_STRING for allocation-free UNICODE_STRING initialization. Signed-off-by: Twaik Yont <9674930+twaik@users.noreply.github.com> --- dlls/wineandroid.drv/device.c | 5 ++--- dlls/wineandroid.drv/dllmain.c | 17 +++-------------- 2 files changed, 5 insertions(+), 17 deletions(-) diff --git a/dlls/wineandroid.drv/device.c b/dlls/wineandroid.drv/device.c index 1c7985ca1a5..d936c95b15a 100644 --- a/dlls/wineandroid.drv/device.c +++ b/dlls/wineandroid.drv/device.c @@ -1188,7 +1188,7 @@ void start_android_device(void) static int android_ioctl( enum android_ioctl code, void *in, DWORD in_size, void *out, DWORD *out_size ) { - static const WCHAR deviceW[] = {'\\','\\','.','\\','W','i','n','e','A','n','d','r','o','i','d',0 }; + static const WCHAR deviceW[] = { '\\','D','e','v','i','c','e','\\','W','i','n','e','A','n','d','r','o','i','d', 0 }; static HANDLE device; IO_STATUS_BLOCK iosb; NTSTATUS status; @@ -1196,12 +1196,11 @@ static int android_ioctl( enum android_ioctl code, void *in, DWORD in_size, void if (!device) { OBJECT_ATTRIBUTES attr; - UNICODE_STRING name; + UNICODE_STRING name = RTL_CONSTANT_STRING( deviceW ); IO_STATUS_BLOCK io; NTSTATUS status; HANDLE file; - RtlInitUnicodeString( &name, deviceW ); InitializeObjectAttributes( &attr, &name, OBJ_CASE_INSENSITIVE, NULL, NULL ); status = NtCreateFile( &file, GENERIC_READ | SYNCHRONIZE, &attr, &io, NULL, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_OPEN, diff --git a/dlls/wineandroid.drv/dllmain.c b/dlls/wineandroid.drv/dllmain.c index d8f3346954c..9c82565fd6f 100644 --- a/dlls/wineandroid.drv/dllmain.c +++ b/dlls/wineandroid.drv/dllmain.c @@ -46,28 +46,18 @@ static NTSTATUS WINAPI ioctl_callback( DEVICE_OBJECT *device, IRP *irp ) static NTSTATUS CALLBACK init_android_driver( DRIVER_OBJECT *driver, UNICODE_STRING *name ) { - static const WCHAR device_nameW[] = {'\\','D','e','v','i','c','e','\\','W','i','n','e','A','n','d','r','o','i','d',0 }; - static const WCHAR device_linkW[] = {'\\','?','?','\\','W','i','n','e','A','n','d','r','o','i','d',0 }; - - UNICODE_STRING nameW, linkW; + UNICODE_STRING nameW = RTL_CONSTANT_STRING( L"\\Device\\WineAndroid" ); DEVICE_OBJECT *device; - NTSTATUS status; driver->MajorFunction[IRP_MJ_DEVICE_CONTROL] = ioctl_callback; - RtlInitUnicodeString( &nameW, device_nameW ); - RtlInitUnicodeString( &linkW, device_linkW ); - - if ((status = IoCreateDevice( driver, 0, &nameW, 0, 0, FALSE, &device ))) return status; - return IoCreateSymbolicLink( &linkW, &nameW ); + return IoCreateDevice( driver, 0, &nameW, 0, 0, FALSE, &device ); } static DWORD CALLBACK device_thread( void *arg ) { - static const WCHAR driver_nameW[] = {'\\','D','r','i','v','e','r','\\','W','i','n','e','A','n','d','r','o','i','d',0 }; - HANDLE start_event = arg; - UNICODE_STRING nameW; + UNICODE_STRING nameW = RTL_CONSTANT_STRING( L"\\Driver\\WineAndroid" ); NTSTATUS status; DWORD ret; @@ -75,7 +65,6 @@ static DWORD CALLBACK device_thread( void *arg ) if (ANDROID_CALL( java_init, NULL )) return 0; /* not running under Java */ - RtlInitUnicodeString( &nameW, driver_nameW ); if ((status = IoCreateDriver( &nameW, init_android_driver ))) { FIXME( "failed to create driver error %lx\n", status ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9977