Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

static BOOL CRYPT_GetFuncFromReg ( DWORD  dwEncodingType,
LPCSTR  pszOID,
LPCSTR  szFuncName,
LPVOID *  ppvFuncAddr,
HCRYPTOIDFUNCADDR phFuncAddr 
) [static]

Definition at line 282 of file oid.c.

Referenced by CryptGetOIDFunctionAddress().

00284 {
00285     BOOL ret = FALSE;
00286     char *keyName;
00287     const char *funcName;
00288     HKEY key;
00289     LSTATUS rc;
00290 
00291     keyName = CRYPT_GetKeyName(dwEncodingType, szFuncName, pszOID);
00292     rc = RegOpenKeyExA(HKEY_LOCAL_MACHINE, keyName, 0, KEY_READ, &key);
00293     if (!rc)
00294     {
00295         DWORD type, size = 0;
00296 
00297         rc = RegQueryValueExA(key, "FuncName", NULL, &type, NULL, &size);
00298         if ((!rc || rc == ERROR_MORE_DATA) && type == REG_SZ)
00299         {
00300             funcName = CryptMemAlloc(size);
00301             rc = RegQueryValueExA(key, "FuncName", NULL, &type,
00302              (LPBYTE)funcName, &size);
00303         }
00304         else
00305             funcName = szFuncName;
00306         rc = RegQueryValueExW(key, DllW, NULL, &type, NULL, &size);
00307         if ((!rc || rc == ERROR_MORE_DATA) && type == REG_SZ)
00308         {
00309             LPWSTR dllName = CryptMemAlloc(size);
00310 
00311             if (dllName)
00312             {
00313                 rc = RegQueryValueExW(key, DllW, NULL, NULL,
00314                  (LPBYTE)dllName, &size);
00315                 if (!rc)
00316                 {
00317                     HMODULE lib;
00318 
00319                     /* This is a bit of a hack; MSDN describes a more
00320                      * complicated unload routine than this will allow.
00321                      * Still, this seems to suffice for now.
00322                      */
00323                     lib = LoadLibraryW(dllName);
00324                     if (lib)
00325                     {
00326                         *ppvFuncAddr = GetProcAddress(lib, funcName);
00327                         if (*ppvFuncAddr)
00328                         {
00329                             struct FuncAddr *addr =
00330                              CryptMemAlloc(sizeof(struct FuncAddr));
00331 
00332                             if (addr)
00333                             {
00334                                 addr->lib = lib;
00335                                 addr->dllList = addr->currentDll = NULL;
00336                                 *phFuncAddr = addr;
00337                                 ret = TRUE;
00338                             }
00339                             else
00340                             {
00341                                 *phFuncAddr = NULL;
00342                                 FreeLibrary(lib);
00343                             }
00344                         }
00345                         else
00346                         {
00347                             /* Unload the library, the caller doesn't want
00348                              * to unload it when the return value is NULL.
00349                              */
00350                             FreeLibrary(lib);
00351                         }
00352                     }
00353                 }
00354                 else
00355                     SetLastError(rc);
00356                 CryptMemFree(dllName);
00357             }
00358         }
00359         else
00360             SetLastError(rc);
00361         if (funcName != szFuncName)
00362             CryptMemFree((char *)funcName);
00363         RegCloseKey(key);
00364     }
00365     else
00366         SetLastError(rc);
00367     CryptMemFree(keyName);
00368     return ret;
00369 }


Generated on Fri Feb 10 05:27:54 2012 for ReactOS by doxygen 1.6.3

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.