Cryptoki dll导致应用程序崩溃
问题描述:
我在C#应用程序中使用cryptoki。我的问题如下: 我使用以下代码初始化的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时崩溃,有时候应用会在检查是否存在至少一个读卡器时崩溃。
在调试模式下,我发现cryptoki.Slots [I] .Token抛出错误ñ。 224 - 这个错误意味着没有令牌存在。这个错误会导致我的应用崩溃吗?你有什么想法如何克服这个问题?
非常感谢你, GICA G.
答
看来升级到最后一个NCryptoki.dll可以解决问题。
但是,我仍然不明白为什么这个错误导致我的应用程序崩溃。
答
if (cryptoki != null)
这看起来是错误的。这应该是:
if (cryptoki == null)
我需要确定,如果在之前使用过cryptoki,那么会话已最终确定,所以cryptoki必须为空。 – GicaGG 2014-09-01 08:15:09
如果* always *'null',为什么首先将它作为参数传递?特别是因为你传递了它。 – nvoigt 2014-09-01 08:30:56
@nvoigt看起来这个方法是打算在他的类的对象引用上调用,这意味着类中的cryptoki变量可以在方法被调用时实例化,但不应该是。 – IllusiveBrian 2014-09-01 08:34:33