CryptoAPI: Очень долгое CryptReleaseContext Rutoken CSP v 1.0
Здравствуйте.
у клиента появилась проблема: зависает наш софт, зависает именно на освобождении контекста провайдера Rutoken CSP v 1.0 - самое долгое 2 с лишним часа.
DWORD index = 0;
DWORD len = 0;
DWORD provType;
CString provName;
HCRYPTPROV prov(0);
while (CryptEnumProviders(index, 0, 0, &provType, 0, &len))
{
if (CryptEnumProviders(index, 0, 0, &provType, provName.GetBufferSetLength(len), &len))
{
provName.ReleaseBuffer();
ca_log_event(L"CryptAcquireContext CSP " + provName, false);
if (CryptAcquireContext(&prov, 0, provName, provType, CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
{
if (AlgorithmIsSupported(prov, algId, keyLength))
{
ca_log_event(L"CSP found " + provName, false);
break;
}
ca_log_event(L"CryptReleaseContext CSP " + provName, false);
CryptReleaseContext(prov, 0);
prov = 0;
}
else
{
ca_log_err(GetLastError());
}
}
index++;
}
Лог для наглядности:
03.09.2024 16:13:30.164 (ThreadId: 7312) FindProvByAlgId: CryptAcquireContext CSP Aktiv ruToken CSP v1.0
03.09.2024 16:13:30.975 (ThreadId: 7312) FindProvByAlgId: CryptReleaseContext CSP Aktiv ruToken CSP v1.0
03.09.2024 18:42:49.247 (ThreadId: 7312) FindProvByAlgId: CryptAcquireContext CSP FCP Cryptographic Service Provider
03.09.2024 18:42:49.247 (ThreadId: 7312) FindProvByAlgId: CryptReleaseContext CSP FCP Cryptographic Service Provider
Далее попытка следующего вызова функции завершается с ошибкой(формулировка наша, но код ошибки есть):
03.09.2024 18:42:49.250 (ThreadId: 7312) FindProvByAlgId: CryptAcquireContext CSP Aktiv ruToken CSP v1.0
ERROR 03.09.2024 18:42:49.257 (ThreadId: 7312) FindProvByAlgId: Контекст криптопровайдера не был получен, или уже был освобожден
ERROR 03.09.2024 18:42:49.257 (ThreadId: 7312) FindProvByAlgId: Thu Dec 22 02:25:51 2022; CryptUtil.cpp:526
ERROR 03.09.2024 18:42:49.259 (ThreadId: 7312) FindProvByAlgId: ERROR Неизвестная ошибка. (0x8010001d)
Подскажите, пожалуйста, в чем может быть причина и как решить проблему?