Pierre Schweitzer : setupapi: Implement SetupOpenLog(), SetupCloseLog().

Alexandre Julliard julliard at wine.codeweavers.com
Thu Mar 26 11:13:57 CDT 2015


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

Author: Pierre Schweitzer <pierre at reactos.org>
Date:   Wed Mar 25 21:12:35 2015 +0100

setupapi: Implement SetupOpenLog(), SetupCloseLog().

---

 dlls/setupapi/misc.c     | 79 ++++++++++++++++++++++++++++++++++++++++++++++++
 dlls/setupapi/setupcab.c |  1 +
 dlls/setupapi/stubs.c    | 17 -----------
 3 files changed, 80 insertions(+), 17 deletions(-)

diff --git a/dlls/setupapi/misc.c b/dlls/setupapi/misc.c
index 6bdb404..f294821 100644
--- a/dlls/setupapi/misc.c
+++ b/dlls/setupapi/misc.c
@@ -42,6 +42,18 @@ WINE_DEFAULT_DEBUG_CHANNEL(setupapi);
 /* arbitrary limit not related to what native actually uses */
 #define OEM_INDEX_LIMIT 999
 
+/* Handles and critical sections for the SetupLog API */
+static HANDLE setupact = INVALID_HANDLE_VALUE;
+static HANDLE setuperr = INVALID_HANDLE_VALUE;
+static CRITICAL_SECTION setupapi_cs;
+static CRITICAL_SECTION_DEBUG critsect_debug =
+{
+    0, 0, &setupapi_cs,
+    { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },
+    0, 0, { (DWORD_PTR)(__FILE__ ": setupapi_cs") }
+};
+static CRITICAL_SECTION setupapi_cs = { &critsect_debug, -1, 0, 0, 0, 0 };
+
 /**************************************************************************
  * MyFree [SETUPAPI.@]
  *
@@ -1600,3 +1612,70 @@ BOOL WINAPI SetupSetNonInteractiveMode( BOOL flag )
     non_interactive_mode = flag;
     return ret;
 }
+
+/***********************************************************************
+ *      SetupCloseLog(SETUPAPI.@)
+ */
+void WINAPI SetupCloseLog(void)
+{
+    EnterCriticalSection(&setupapi_cs);
+
+    CloseHandle(setupact);
+    setupact = INVALID_HANDLE_VALUE;
+
+    CloseHandle(setuperr);
+    setuperr = INVALID_HANDLE_VALUE;
+
+    LeaveCriticalSection(&setupapi_cs);
+}
+
+/***********************************************************************
+ *      SetupOpenLog(SETUPAPI.@)
+ */
+BOOL WINAPI SetupOpenLog(BOOL reserved)
+{
+    WCHAR path[MAX_PATH];
+
+    static const WCHAR setupactlog[] = {'\\','s','e','t','u','p','a','c','t','.','l','o','g',0};
+    static const WCHAR setuperrlog[] = {'\\','s','e','t','u','p','e','r','r','.','l','o','g',0};
+
+    EnterCriticalSection(&setupapi_cs);
+
+    if (setupact != INVALID_HANDLE_VALUE && setuperr != INVALID_HANDLE_VALUE)
+    {
+        LeaveCriticalSection(&setupapi_cs);
+        return TRUE;
+    }
+
+    GetWindowsDirectoryW(path, MAX_PATH);
+    lstrcatW(path, setupactlog);
+
+    setupact = CreateFileW(path, FILE_GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ,
+                           NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
+    if (setupact == INVALID_HANDLE_VALUE)
+    {
+        LeaveCriticalSection(&setupapi_cs);
+        return FALSE;
+    }
+
+    SetFilePointer(setupact, 0, NULL, FILE_END);
+
+    GetWindowsDirectoryW(path, MAX_PATH);
+    lstrcatW(path, setuperrlog);
+
+    setuperr = CreateFileW(path, FILE_GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ,
+                           NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
+    if (setuperr == INVALID_HANDLE_VALUE)
+    {
+        CloseHandle(setupact);
+        setupact = INVALID_HANDLE_VALUE;
+        LeaveCriticalSection(&setupapi_cs);
+        return FALSE;
+    }
+
+    SetFilePointer(setuperr, 0, NULL, FILE_END);
+
+    LeaveCriticalSection(&setupapi_cs);
+
+    return TRUE;
+}
diff --git a/dlls/setupapi/setupcab.c b/dlls/setupapi/setupcab.c
index 21336d7..54c0256 100644
--- a/dlls/setupapi/setupcab.c
+++ b/dlls/setupapi/setupcab.c
@@ -694,6 +694,7 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
         break;
     case DLL_PROCESS_DETACH:
         if (lpvReserved) break;
+        SetupCloseLog();
         if (CABINET_hInstance) FreeLibrary(CABINET_hInstance);
         break;
     }
diff --git a/dlls/setupapi/stubs.c b/dlls/setupapi/stubs.c
index 673bbbf..66bd5d4 100644
--- a/dlls/setupapi/stubs.c
+++ b/dlls/setupapi/stubs.c
@@ -189,14 +189,6 @@ BOOL WINAPI RegistryDelnode(DWORD x, DWORD y)
 }
 
 /***********************************************************************
- *      SetupCloseLog(SETUPAPI.@)
- */
-void WINAPI SetupCloseLog(void)
-{
-    FIXME("() stub\n");
-}
-
-/***********************************************************************
  *      SetupLogErrorW(SETUPAPI.@)
  */
 BOOL WINAPI SetupLogErrorW(LPCWSTR MessageString, LogSeverity Severity)
@@ -206,15 +198,6 @@ BOOL WINAPI SetupLogErrorW(LPCWSTR MessageString, LogSeverity Severity)
 }
 
 /***********************************************************************
- *      SetupOpenLog(SETUPAPI.@)
- */
-BOOL WINAPI SetupOpenLog(BOOL Reserved)
-{
-    FIXME("(%d) stub\n", Reserved);
-    return TRUE;
-}
-
-/***********************************************************************
  *      SetupPromptReboot(SETUPAPI.@)
  */
 INT WINAPI SetupPromptReboot( HSPFILEQ file_queue, HWND owner, BOOL scan_only )




More information about the wine-cvs mailing list