尝试读取或写入受保护的内存。 PKCS11Interop

时间:2017-04-12 00:33:31

标签: pkcs#11 pkcs11interop

我在highlighed行中遇到了Access违例异常。

  

尝试读取或写入受保护的内存。这通常表明其他内存已损坏。

我在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)中从此行获得异常,并且例外是

  

对于UInt32,值太大或太小。 OverflowExcepiton未处理。

1 个答案:

答案 0 :(得分:1)

您似乎使用了错误的HighLevelAPI集。您需要使用Net.Pkcs11Interop.HighLevelAPI命名空间中的类,而不需要任何数字。

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

using Net.Pkcs11Interop.HighLevelAPI;
在代码中

而不是

using Net.Pkcs11Interop.HighLevelAPI81;

有关详细信息,请参阅Pkcs11Interop library architecture,您还可以查看使用Net.Pkcs11Interop.HighLevelAPI的{​​{3}}。