CryptAcquireContextA завершается сбоем в C ++ CLR для "Aloaha Cryptographic Provider" - PullRequest
0 голосов
/ 29 декабря 2011

У меня есть проект C ++ CLR с управляемым и неуправляемым кодом.В этом проекте я перебираю список криптопровайдеров и ищу подходящие.

Поэтому я использую функции
CryptEnumProvidersA
CryptAcquireContextA

У меня есть проект C #, который использует проект C ++.Когда я дважды вызываю метод для обхода списка криптопровайдеров, мое приложение вылетает.И он падает на CryptAcquireContextA.И только на "Aloaha Cryptographic Provider".

Когда я использую режим отладки, он также падает.Но когда я использую режим отладки, устанавливаю точку останова и пропускаю код с помощью F10, он отлично работает.

Когда я выполняю код C ++ для отдельного проекта, он отлично работает во всех случаях.

Так, У меня здесь два вопроса:
1) Как возможен такой сбой?И почему это происходит?
2) Как я могу вызвать CryptAcquireContextA для обработки такого сбоя?

Мои соображения.
1) Некоторые проблемы с памятью.Я искал утечки памяти, но ничего не нашел.
2) Я пытался использовать try-catch, но безрезультатно, CryptAcquireContextA все равно вылетает.Я хотел бы использовать такие функции, как «CryptIsValidProvider» или «CryptPingProvider», но я не нашел его.

1 Ответ

0 голосов
/ 29 декабря 2011

Если это работает при пошаговом выполнении, это, вероятно, условие гонки (вы приостановлены в отладчике достаточно долго, чтобы какой-то другой процесс или драйвер успел продвинуться).

Имеет ли значение, какой объем кода вы выполняете за один шаг? Работает ли установка Sleep вместо точки останова непосредственно перед вызовом CryptAcquireContextA?

...