winedevice: Get rid of global driver_hkey variable and fix some leaks.

Signed-off-by: Sebastian Lackner <sebastian@fds-team.de>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
oldstable
Sebastian Lackner 2016-02-26 06:11:36 +01:00 committed by Alexandre Julliard
parent 4bed3d231e
commit e931f0e83d
1 changed files with 14 additions and 4 deletions

View File

@ -42,7 +42,6 @@ extern NTSTATUS CDECL wine_ntoskrnl_main_loop( HANDLE stop_event );
static WCHAR *driver_name;
static SERVICE_STATUS_HANDLE service_handle;
static HKEY driver_hkey;
static HANDLE stop_event;
static DRIVER_OBJECT driver_obj;
static DRIVER_EXTENSION driver_extension;
@ -203,6 +202,7 @@ static HMODULE load_driver(void)
'\\','S','e','r','v','i','c','e','s','\\',0};
UNICODE_STRING keypath;
HKEY driver_hkey;
HMODULE module;
LPWSTR path = NULL, str;
DWORD type, size;
@ -215,7 +215,7 @@ static HMODULE load_driver(void)
{
WINE_ERR( "cannot open key %s, err=%u\n", wine_dbgstr_w(str), GetLastError() );
HeapFree( GetProcessHeap(), 0, str);
return FALSE;
return NULL;
}
RtlInitUnicodeString( &keypath, str );
@ -231,7 +231,12 @@ static HMODULE load_driver(void)
ExpandEnvironmentStringsW(str,path,size);
}
HeapFree( GetProcessHeap(), 0, str );
if (!path) return FALSE;
if (!path)
{
RtlFreeUnicodeString( &keypath );
RegCloseKey( driver_hkey );
return NULL;
}
if (!strncmpiW( path, systemrootW, 12 ))
{
@ -265,12 +270,17 @@ static HMODULE load_driver(void)
lstrcatW(path, postfixW);
str = path;
}
RegCloseKey( driver_hkey );
WINE_TRACE( "loading driver %s\n", wine_dbgstr_w(str) );
module = load_driver_module( str );
HeapFree( GetProcessHeap(), 0, path );
if (!module) return NULL;
if (!module)
{
RtlFreeUnicodeString( &keypath );
return NULL;
}
init_driver( module, &keypath );
return module;