kernel32: Make CreateFile called with creation == 0 work when opening a vxd in win9x mode.

Dmitry Timoshkov dmitry at baikal.ru
Sat Mar 10 23:41:31 CST 2012


A widely used approach to open/load device drivers under win9x is

/* Check if already loaded in system.ini */
hvxd = CreateFile("\\\\.\\mydevice", 0, 0, 0, 0, 0, 0);
if (hvxd == INVALID_HANDLE_VALUE)
    /* Load dynamically from PATH */
    hvxd = CreateFile("\\\\.\\path\\to\\mydevice.vxd", 0, 0, 0, CREATE_NEW, FILE_FLAG_DELETE_ON_CLOSE, 0);

First call never succeeds under Wine, and some device drivers refuse to load
more than once.
---
 dlls/kernel32/file.c |    1 +
 1 file changed, 1 insertion(+)

diff --git a/dlls/kernel32/file.c b/dlls/kernel32/file.c
index a3b4411..089f693 100644
--- a/dlls/kernel32/file.c
+++ b/dlls/kernel32/file.c
@@ -1310,6 +1310,7 @@ HANDLE WINAPI CreateFileW( LPCWSTR filename, DWORD access, DWORD sharing,
         else if (GetVersion() & 0x80000000)
         {
             vxd_name = filename + 4;
+            if (!creation) creation = OPEN_EXISTING;
         }
     }
     else dosdev = RtlIsDosDeviceName_U( filename );
-- 
1.7.9.2




More information about the wine-patches mailing list