尝试读取或写入受保护的内存。 PKCS11互操作

Attempted to read or write protected memory. PKCS11Interop

我在突出显示的行中收到访问冲突异常。

Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

我在 hsmlabel 上有证书。我正在将我的应用程序构建为 x64

public void getCertificateFromHSM(string certLabel) {

    List<ObjectAttribute> objectAttributes = new List<ObjectAttribute>();
    objectAttributes.Add(new ObjectAttribute(CKA.CKA_CLASS, CKO.CKO_CERTIFICATE));
    objectAttributes.Add(new ObjectAttribute(CKA.CKA_LABEL, certLabel));

    **session.FindObjectsInit(objectAttributes);** --Exception from here

    // Get search results
    List<ObjectHandle> foundObjects = session.FindObjects(2);

    // Terminate searching
    session.FindObjectsFinal();


    // Prepare list of empty attributes we want to read
    List<CKA> attributes = new List<CKA>();
    attributes.Add(CKA.CKA_LABEL);
    attributes.Add(CKA.CKA_VALUE);
}                                                                               

我从这一行中得到异常 session.FindObjectsInit();。我是 pkcs11 的新手。

感谢您在这方面的任何帮助。

我还尝试通过传递 32 位 crypto.dll 将应用程序构建为 32 位,但在那种情况下,我从 PKCS11Interop Net.Pkcs11Interop.LowLevelAPI81.Delegates.InitializeWithGetF‌​unctionList(IntPtr libraryHandle) 中的这一行得到异常,异常是

Value was either too large or too small for a UInt32. OverflowExcepiton was unhandled.

您似乎使用了一组错误的 HighLevelAPI。您需要使用 Net.Pkcs11Interop.HighLevelAPI 命名空间中的 类,末尾没有任何数字。

换句话说,您需要使用以下行

using Net.Pkcs11Interop.HighLevelAPI;

在您的代码中而不是

using Net.Pkcs11Interop.HighLevelAPI81;

参见 Pkcs11Interop library architecture for more info and you can also take a look at official code samples,它们也在使用 Net.Pkcs11Interop.HighLevelAPI