【问题标题】:pkcs11Interop problem with WaitForSlotEvent when reader is removed删除阅读器时,WaitForSlotEvent 的 pkcs11Interop 问题
【发布时间】:2021-02-23 13:21:30
【问题描述】:

我设置pkcs11Interop库如下

Pkcs11Library = PkcsFactories.Pkcs11LibraryFactory.LoadPkcs11Library(PkcsFactories, pkcs11LibraryPath, AppType.MultiThreaded)

然后我立即使用包含 WaitForSlotEvent 的 WPF DispatcherTimer

        Private Sub CardInsertedTimer_Tick(sender As Object, e As EventArgs)
            Dim eventHappened As Boolean
                Dim id As ULong

                Pkcs11Library.WaitForSlotEvent(WaitType.NonBlocking, eventHappened, id)

            If eventHappened Then
                Debug.Print("CardInsertedEvent - Event - Event: " + eventHappened.ToString + "  ID: " + id.ToString)
            End If
        End Sub

我希望这里没有惊喜。如果插槽(它是一个 USB 智能卡读卡器)被移除,那么我会收到一个 C_WaitForSlotEvent 返回的 CKR_DEVICE_ERROR。

  • DispatcherTimer 是否适用于 WaitForSlotEvent?
  • 我应该怎么做才能避免 C_WaitForSlotEvent CKR_DEVICE_ERROR?
  • pkcs11Interop 是否处理插槽的添加和删除(即 智能卡读卡器)?
  • 如果 pkcs11Interop 不处理添加和删除插槽正在轮询 唯一的方法以及最好的投票方式是什么?

【问题讨论】:

    标签: vb.net pkcs11interop


    【解决方案1】:

    > DispatcherTimer 可以用于 WaitForSlotEvent 吗?

    总的来说应该没问题。您还可以考虑在从单独线程调用的阻塞模式下使用WaitForSlotEvent

    >如何避免C_WaitForSlotEvent CKR_DEVICE_ERROR?

    您需要询问非托管 PKCS#11 库的供应商。

    AFAIK C_WaitForSlotEvent 设计用于令牌/卡相关事件,而不是插槽/读卡器相关事件。 PKCS#11 specification 声明当您添加或删除插槽/阅读器时,您可能需要重新加载 PKCS#11 库甚至重新启动操作系统:

    在某些平台,或更早的 PKCS11 兼容库上,可能需要成功调用 C_Initialize 或重新启动整个系统。

    > pkcs11Interop 是否处理插槽(即智能卡读卡器)的添加和删除?

    Pkcs11Interop 不做其他任何事情,只是让您可以访问PKCS#11 specification 中描述的非托管函数C_WaitForSlotEvent

    > 如果 pkcs11Interop 不处理添加和删除插槽是唯一的轮询方式,那么最好的轮询方式是什么?

    查看第一个问题的答案。

    【讨论】:

    • 谢谢。我正在处理 (Atos) CaedOS v5.3 - 你对避免错误有什么想法吗?
    • 避免删除阅读器或捕获特定异常并在您的应用程序中适当地处理它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多