Peter Dons Tychsen : winedevice: Fix problems with driver entries without the "ImagePath" entry in registry .
Alexandre Julliard
julliard at winehq.org
Wed Sep 17 07:15:14 CDT 2008
Module: wine
Branch: master
Commit: bc7b194bf9ec41387fc269649ee739928028a2e2
URL: http://source.winehq.org/git/wine.git/?a=commit;h=bc7b194bf9ec41387fc269649ee739928028a2e2
Author: Peter Dons Tychsen <donpedro at tdcadsl.dk>
Date: Wed Sep 17 00:33:26 2008 +0200
winedevice: Fix problems with driver entries without the "ImagePath" entry in registry.
---
programs/winedevice/device.c | 34 +++++++++++++++++++++++++---------
1 files changed, 25 insertions(+), 9 deletions(-)
diff --git a/programs/winedevice/device.c b/programs/winedevice/device.c
index 5a1ba99..7afe97e 100644
--- a/programs/winedevice/device.c
+++ b/programs/winedevice/device.c
@@ -147,6 +147,8 @@ static NTSTATUS init_driver( HMODULE module, UNICODE_STRING *keyname )
/* load the .sys module for a device driver */
static BOOL load_driver(void)
{
+ static const WCHAR driversW[] = {'\\','d','r','i','v','e','r','s','\\',0};
+ static const WCHAR postfixW[] = {'.','s','y','s',0};
static const WCHAR ntprefixW[] = {'\\','?','?','\\',0};
static const WCHAR ImagePathW[] = {'I','m','a','g','e','P','a','t','h',0};
static const WCHAR servicesW[] = {'\\','R','e','g','i','s','t','r','y',
@@ -174,17 +176,31 @@ static BOOL load_driver(void)
/* read the executable path from memory */
size = 0;
- if (RegQueryValueExW( driver_hkey, ImagePathW, NULL, &type, NULL, &size )) return FALSE;
-
- str = HeapAlloc( GetProcessHeap(), 0, size );
- if (!RegQueryValueExW( driver_hkey, ImagePathW, NULL, &type, (LPBYTE)str, &size ))
+ if (!RegQueryValueExW( driver_hkey, ImagePathW, NULL, &type, NULL, &size ))
+ {
+ str = HeapAlloc( GetProcessHeap(), 0, size );
+ if (!RegQueryValueExW( driver_hkey, ImagePathW, NULL, &type, (LPBYTE)str, &size ))
+ {
+ size = ExpandEnvironmentStringsW(str,NULL,0);
+ path = HeapAlloc(GetProcessHeap(),0,size*sizeof(WCHAR));
+ ExpandEnvironmentStringsW(str,path,size);
+ }
+ HeapFree( GetProcessHeap(), 0, str );
+ if (!path) return FALSE;
+ }
+ else
{
- size = ExpandEnvironmentStringsW(str,NULL,0);
- path = HeapAlloc(GetProcessHeap(),0,size*sizeof(WCHAR));
- ExpandEnvironmentStringsW(str,path,size);
+ /* default is to use the driver name + ".sys" */
+ WCHAR buffer[MAX_PATH];
+ GetSystemDirectoryW(buffer, MAX_PATH);
+ path = HeapAlloc(GetProcessHeap(),0,
+ (strlenW(buffer) + strlenW(driversW) + strlenW(driver_name) + strlenW(postfixW) + 1)
+ *sizeof(WCHAR));
+ lstrcpyW(path, buffer);
+ lstrcatW(path, driversW);
+ lstrcatW(path, driver_name);
+ lstrcatW(path, postfixW);
}
- HeapFree( GetProcessHeap(), 0, str );
- if (!path) return FALSE;
/* GameGuard uses an NT-style path name */
str = path;
More information about the wine-cvs
mailing list