HCRYPTPROV hCryptProv = NULL;
BOOL result;
result = CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0);
CryptAcquireContext - CryptoAPI problem!
Вот код:
Код:
Пробовал следующее:
Код:
//1
result = CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, NULL);
//2
result = CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET);
//3
result = CryptAcquireContext (&hCryptProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, 0);
result = CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, NULL);
//2
result = CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET);
//3
result = CryptAcquireContext (&hCryptProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, 0);
Не помогло.
А если вот так:
Код:
result = CryptAcquireContext (&hCryptProv, NULL, NULL, PROV_RSA_FULL, 0);
то работает(то есть — провайдер по умолчанию)
Причем до этого я уже делал(в другой функции):
Код:
BOOL result;
result = CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0);
...
...
...
result = CryptReleaseContext(hCryptProv, 0);
result = CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0);
...
...
...
result = CryptReleaseContext(hCryptProv, 0);
и result везде был 1. А почему здесь ошибка, понять никак не могу?
А кроме того!:
Если вот так сделать то result = 1, но валится дальше:
Код:
BOOL result;
result= CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0); // здесь result = 0
result= CryptReleaseContext(hCryptProv, 0);// здесь result = 0
hCryptProv = NULL;
result= CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0);// здесь result = 0
result= CryptReleaseContext(hCryptProv, 0);// здесь result = 0
hCryptProv = NULL;
result= CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0);// !!!!!здесь result = 1 !!!!
result= CryptReleaseContext(hCryptProv, 0);// !!!! здесь result = 1 !!!
hCryptProv = NULL;
result= CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0);// !!!!!здесь result = 1 !!!!!
...
...
...
result = CryptImportKey (hCryptProv, (BYTE *)&sessKey[0], sessKeySize, hPublicKey, 0, &hSessionKey); // здесь валится result = 0
...
...
...
result= CryptReleaseContext(hCryptProv, 0);// !!!! здесь result = 1 !!!
result= CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0); // здесь result = 0
result= CryptReleaseContext(hCryptProv, 0);// здесь result = 0
hCryptProv = NULL;
result= CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0);// здесь result = 0
result= CryptReleaseContext(hCryptProv, 0);// здесь result = 0
hCryptProv = NULL;
result= CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0);// !!!!!здесь result = 1 !!!!
result= CryptReleaseContext(hCryptProv, 0);// !!!! здесь result = 1 !!!
hCryptProv = NULL;
result= CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0);// !!!!!здесь result = 1 !!!!!
...
...
...
result = CryptImportKey (hCryptProv, (BYTE *)&sessKey[0], sessKeySize, hPublicKey, 0, &hSessionKey); // здесь валится result = 0
...
...
...
result= CryptReleaseContext(hCryptProv, 0);// !!!! здесь result = 1 !!!
Валится с ошибкой — плохая версия поставщика...
Я уже весь мозг себе ... Что за хрень такая!
Посмотри ветку в реестре HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider
посмотри типы.. на всякий случай