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