Definition at line 371 of file oid.c.
Referenced by CertVerifyCertificateChainPolicy(), CRYPT_ExportEncryptedKey(), CRYPT_GenKey(), CRYPT_GetCreateFunction(), CRYPT_GetRetrieveFunction(), CRYPT_ImportEncryptedKey(), CRYPT_LoadDecoderExFunc(), CRYPT_LoadDecoderFunc(), CRYPT_LoadEncoderExFunc(), CRYPT_LoadEncoderFunc(), CRYPT_ProvOpenStore(), CryptExportPublicKeyInfoEx(), CryptFormatObject(), CryptGetObjectUrl(), and CryptImportPublicKeyInfoEx().
00374 {
00375 BOOL ret = FALSE;
00376 struct OIDFunctionSet *set = hFuncSet;
00377
00378 TRACE("(%p, %d, %s, %08x, %p, %p)\n", hFuncSet, dwEncodingType,
00379 debugstr_a(pszOID), dwFlags, ppvFuncAddr, phFuncAddr);
00380
00381 *ppvFuncAddr = NULL;
00382 if (!(dwFlags & CRYPT_GET_INSTALLED_OID_FUNC_FLAG))
00383 {
00384 struct OIDFunction *function;
00385
00386 EnterCriticalSection(&set->cs);
00387 LIST_FOR_EACH_ENTRY(function, &set->functions, struct OIDFunction, next)
00388 {
00389 if (function->encoding == GET_CERT_ENCODING_TYPE(dwEncodingType))
00390 {
00391 if (!IS_INTOID(pszOID))
00392 {
00393 if (!IS_INTOID(function->entry.pszOID) &&
00394 !strcasecmp(function->entry.pszOID, pszOID))
00395 {
00396 *ppvFuncAddr = function->entry.pvFuncAddr;
00397 *phFuncAddr = NULL;
00398 ret = TRUE;
00399 break;
00400 }
00401 }
00402 else if (function->entry.pszOID == pszOID)
00403 {
00404 *ppvFuncAddr = function->entry.pvFuncAddr;
00405 *phFuncAddr = NULL;
00406 ret = TRUE;
00407 break;
00408 }
00409 }
00410 }
00411 LeaveCriticalSection(&set->cs);
00412 }
00413 if (!*ppvFuncAddr)
00414 ret = CRYPT_GetFuncFromReg(dwEncodingType, pszOID, set->name,
00415 ppvFuncAddr, phFuncAddr);
00416 TRACE("returning %d\n", ret);
00417 return ret;
00418 }