Я использую криптоки в приложении C#. У меня проблема заключается в следующем: я инициализировать Cryptoki, используя следующий код:Cryptoki dll вызывает приложение для сбоя
public static bool InitializeCryptoki(string criptokilib)
{
if (cryptoki != null)
throw new PdfSignException(PdfSignExceptionCode.PDF_EXCEPTION_NOT_FINALIZED);
try
{
cryptoki = new Cryptoki(criptokilib);
if (cryptoki.Initialize() == 0)
{
isInitialized = true;
return true;
}
return false;
}
catch (CryptokiException ex)
{
Log.Log(log, LogState.ERROR, UserId, "Initialize", null, ex.Message);
return false;
}
}
значение criptokilib равно «eTPKCS11.dll».
После Cryptoki инициализируется, проверить, существует ли по меньшей мере один считыватель карт, используя следующий код:
public static bool HasCardReaders
{
get
{
if (cryptoki == null)
throw new PdfSignException(PdfSignExceptionCode.PDF_EXCEPTION_NOT_INITIALIZED);
return cryptoki.Slots.Count != 0;
}
}
- При запуске приложения в режиме отладки компилятора (VS 2012), об ошибке отображается сообщение (нет сбоя приложения), в котором говорится, что считыватель карт не обнаружен.
- При запуске приложения вне компилятора (VS 2012) - дважды щелкнув exe в папке отладки, мое приложение выйдет из строя. Рассматривая файлы журнала, иногда приложение вылетает во время инициализации криптоки, а иногда приложение вылетает, проверяя, существует ли хотя бы один считыватель карт.
В режиме отладки, я обнаружил, что cryptoki.Slots [я] .Token кидает ошибки п. 224 - эта ошибка означает, что маркер отсутствует. Может ли эта ошибка привести к сбою моего приложения? Вы не знаете, как преодолеть эту проблему?
Большое спасибо, Gică Г.
Мне нужно быть уверенным, что если криптоки использовался раньше, этот сеанс был завершен, поэтому криптоки должны быть пустыми. – GicaGG
Если это всегда * 'null', зачем передавать его в качестве параметра в первую очередь? Тем более, что вы его передаете. – nvoigt
@nvoigt Похоже, что метод предназначен для вызова ссылки на объект его класса, что означает, что переменная 'cryptoki' в классе может быть создана уже при вызове метода, но не должна быть. – IllusiveBrian