Alexandre Julliard : kernel32: Fix VxD open code for the new NtCreateFile syntax for Unix files.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Jun 18 08:05:03 CDT 2007


Module: wine
Branch: master
Commit: 8e53a00282befd209f5fdd2c6aa2e4085b659a37
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=8e53a00282befd209f5fdd2c6aa2e4085b659a37

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Mon Jun 18 12:53:27 2007 +0200

kernel32: Fix VxD open code for the new NtCreateFile syntax for Unix files.

---

 dlls/kernel32/vxd.c |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/dlls/kernel32/vxd.c b/dlls/kernel32/vxd.c
index 875aeed..106b086 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 );
 




More information about the wine-cvs mailing list