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