From 8e53a00282befd209f5fdd2c6aa2e4085b659a37 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Mon, 18 Jun 2007 12:53:27 +0200 Subject: [PATCH] kernel32: Fix VxD open code for the new NtCreateFile syntax for Unix files. --- dlls/kernel32/vxd.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/dlls/kernel32/vxd.c b/dlls/kernel32/vxd.c index 875aeedec65..106b0868dec 100644 --- a/dlls/kernel32/vxd.c +++ b/dlls/kernel32/vxd.c @@ -91,6 +91,7 @@ static CRITICAL_SECTION vxd_section = { &critsect_debug, -1, 0, 0, 0, 0 }; /* create a file handle to represent a VxD, by opening a dummy file in the wineserver directory */ static HANDLE open_vxd_handle( LPCWSTR name ) { + static const WCHAR prefixW[] = {'\\','?','?','\\','u','n','i','x'}; const char *dir = wine_get_server_dir(); int len; HANDLE ret; @@ -100,14 +101,16 @@ static HANDLE open_vxd_handle( LPCWSTR name ) IO_STATUS_BLOCK io; len = MultiByteToWideChar( CP_UNIXCP, 0, dir, -1, NULL, 0 ); - nameW.Length = (len + 1 + strlenW( name )) * sizeof(WCHAR); + nameW.Length = sizeof(prefixW) + (len + strlenW( name )) * sizeof(WCHAR); nameW.MaximumLength = nameW.Length + sizeof(WCHAR); - if (!(nameW.Buffer = HeapAlloc( GetProcessHeap(), 0, nameW.Length ))) + if (!(nameW.Buffer = HeapAlloc( GetProcessHeap(), 0, nameW.MaximumLength ))) { SetLastError( ERROR_NOT_ENOUGH_MEMORY ); return 0; } - MultiByteToWideChar( CP_UNIXCP, 0, dir, -1, nameW.Buffer, len ); + memcpy( nameW.Buffer, prefixW, sizeof(prefixW) ); + MultiByteToWideChar( CP_UNIXCP, 0, dir, -1, nameW.Buffer + sizeof(prefixW)/sizeof(WCHAR), len ); + len += sizeof(prefixW) / sizeof(WCHAR); nameW.Buffer[len-1] = '/'; strcpyW( nameW.Buffer + len, name );