Sebastian Lackner : winedevice: Get rid of static driver_module variable.

Alexandre Julliard julliard at winehq.org
Thu Aug 4 17:20:18 CDT 2016


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

Author: Sebastian Lackner <sebastian at fds-team.de>
Date:   Thu Aug  4 19:00:00 2016 +0200

winedevice: Get rid of static driver_module variable.

Signed-off-by: Sebastian Lackner <sebastian at fds-team.de>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 programs/winedevice/device.c | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/programs/winedevice/device.c b/programs/winedevice/device.c
index 2da9446..e31318c 100644
--- a/programs/winedevice/device.c
+++ b/programs/winedevice/device.c
@@ -43,7 +43,6 @@ extern NTSTATUS CDECL wine_ntoskrnl_main_loop( HANDLE stop_event );
 static SERVICE_STATUS_HANDLE service_handle;
 static HANDLE stop_event;
 static DRIVER_OBJECT *driver_obj;
-static HMODULE driver_module;
 
 /* find the LDR_MODULE corresponding to the driver module */
 static LDR_MODULE *find_ldr_module( HMODULE module )
@@ -216,22 +215,22 @@ static NTSTATUS WINAPI init_driver( DRIVER_OBJECT *driver_object, UNICODE_STRING
     NTSTATUS status;
     const IMAGE_NT_HEADERS *nt;
     const WCHAR *driver_name;
+    HMODULE module;
 
     /* Retrieve driver name from the keyname */
     driver_name = strrchrW( keyname->Buffer, '\\' );
     driver_name++;
 
-    driver_module = load_driver( driver_name, keyname );
-    if (!driver_module)
+    module = load_driver( driver_name, keyname );
+    if (!module)
         return STATUS_DLL_INIT_FAILED;
 
     driver_obj = driver_object;
+    driver_object->DriverSection = find_ldr_module( module );
 
-    nt = RtlImageNtHeader( driver_module );
+    nt = RtlImageNtHeader( module );
     if (!nt->OptionalHeader.AddressOfEntryPoint) return STATUS_SUCCESS;
-
-    driver_object->DriverSection   = find_ldr_module( driver_module );
-    driver_object->DriverInit      = (PDRIVER_INITIALIZE)((char *)driver_module + nt->OptionalHeader.AddressOfEntryPoint);
+    driver_object->DriverInit = (PDRIVER_INITIALIZE)((char *)module + nt->OptionalHeader.AddressOfEntryPoint);
 
     if (WINE_TRACE_ON(relay))
         WINE_DPRINTF( "%04x:Call driver init %p (obj=%p,str=%s)\n", GetCurrentThreadId(),
@@ -254,8 +253,10 @@ static NTSTATUS WINAPI init_driver( DRIVER_OBJECT *driver_object, UNICODE_STRING
 }
 
 /* call the driver unload function */
-static void unload_driver( HMODULE module, DRIVER_OBJECT *driver_obj )
+static void unload_driver( DRIVER_OBJECT *driver_obj )
 {
+    LDR_MODULE *ldr = driver_obj->DriverSection;
+
     if (driver_obj->DriverUnload)
     {
         if (WINE_TRACE_ON(relay))
@@ -268,7 +269,8 @@ static void unload_driver( HMODULE module, DRIVER_OBJECT *driver_obj )
             WINE_DPRINTF( "%04x:Ret  driver unload %p (obj=%p)\n", GetCurrentThreadId(),
                           driver_obj->DriverUnload, driver_obj );
     }
-    FreeLibrary( module );
+
+    FreeLibrary( ldr->BaseAddress );
     IoDeleteDriver( driver_obj );
 }
 
@@ -349,7 +351,7 @@ static void WINAPI ServiceMain( DWORD argc, LPWSTR *argv )
         SetServiceStatus( service_handle, &status );
 
         wine_ntoskrnl_main_loop( stop_event );
-        unload_driver( driver_module, driver_obj );
+        unload_driver( driver_obj );
     }
     else WINE_ERR( "driver %s failed to load\n", wine_dbgstr_w(driver_name) );
 




More information about the wine-cvs mailing list