From f6cd567fa5c5a0ab78ee4070c0891825faef42ae Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Fri, 1 Aug 2008 10:19:15 -0700 Subject: [PATCH] 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 86eb48e..1d1a007 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.@) * @@ -380,40 +413,17 @@ static void *CRYPT_LoadSIPFunc(const GUI 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; } -- 1.4.1