Juan Lang : crypt32: Create a helper to load a SIP function from an open key.

Alexandre Julliard julliard at winehq.org
Mon Aug 4 08:53:32 CDT 2008


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

Author: Juan Lang <juan.lang at gmail.com>
Date:   Fri Aug  1 10:19:15 2008 -0700

crypt32: Create a helper to load a SIP function from an open key.

---

 dlls/crypt32/sip.c |   68 +++++++++++++++++++++++++++++----------------------
 1 files changed, 39 insertions(+), 29 deletions(-)

diff --git a/dlls/crypt32/sip.c b/dlls/crypt32/sip.c
index 8668f5b..227c895 100644
--- a/dlls/crypt32/sip.c
+++ b/dlls/crypt32/sip.c
@@ -254,6 +254,39 @@ end_function:
     return TRUE;
 }
 
+static void *CRYPT_LoadSIPFuncFromKey(HKEY key, HMODULE *pLib)
+{
+    LONG r;
+    DWORD size;
+    WCHAR dllName[MAX_PATH];
+    char functionName[MAX_PATH];
+    HMODULE lib;
+    void *func = NULL;
+
+    /* Read the DLL entry */
+    size = sizeof(dllName);
+    r = RegQueryValueExW(key, szDllName, NULL, NULL, (LPBYTE)dllName, &size);
+    if (r) goto end;
+
+    /* Read the Function entry */
+    size = sizeof(functionName);
+    r = RegQueryValueExA(key, "FuncName", NULL, NULL, (LPBYTE)functionName,
+     &size);
+    if (r) goto end;
+
+    lib = LoadLibraryW(dllName);
+    if (!lib)
+        goto end;
+    func = GetProcAddress(lib, functionName);
+    if (func)
+        *pLib = lib;
+    else
+        FreeLibrary(lib);
+
+end:
+    return func;
+}
+
 /***********************************************************************
  *             CryptSIPRetrieveSubjectGuid (CRYPT32.@)
  *
@@ -378,40 +411,17 @@ static void *CRYPT_LoadSIPFunc(const GUID *pgSubject, LPCWSTR function,
  HMODULE *pLib)
 {
     LONG r;
-    HKEY key = NULL;
-    DWORD size;
-    WCHAR dllName[MAX_PATH];
-    char functionName[MAX_PATH];
-    HMODULE lib;
+    HKEY key;
     void *func = NULL;
 
     TRACE("(%s, %s)\n", debugstr_guid(pgSubject), debugstr_w(function));
 
     r = CRYPT_OpenSIPFunctionKey(pgSubject, function, &key);
-    if (r) goto error;
-
-    /* Read the DLL entry */
-    size = sizeof(dllName);
-    r = RegQueryValueExW(key, szDllName, NULL, NULL, (LPBYTE)dllName, &size);
-    if (r) goto error;
-
-    /* Read the Function entry */
-    size = sizeof(functionName);
-    r = RegQueryValueExA(key, "FuncName", NULL, NULL, (LPBYTE)functionName,
-     &size);
-    if (r) goto error;
-
-    lib = LoadLibraryW(dllName);
-    if (!lib)
-        goto error;
-    func = GetProcAddress(lib, functionName);
-    if (func)
-        *pLib = lib;
-    else
-        FreeLibrary(lib);
-
-error:
-    RegCloseKey(key);
+    if (!r)
+    {
+        func = CRYPT_LoadSIPFuncFromKey(key, pLib);
+        RegCloseKey(key);
+    }
     TRACE("returning %p\n", func);
     return func;
 }




More information about the wine-cvs mailing list