我在highlighed行中遇到了Access违例异常。
尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
我在hsm
和label
上拥有证书。我正在将我的应用程序构建为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.InitializeWithGetFunctionList(IntPtr libraryHandle)
中从此行获得异常,并且例外是
对于UInt32,值太大或太小。 OverflowExcepiton未处理。
答案 0 :(得分:1)
您似乎使用了错误的HighLevelAPI集。您需要使用Net.Pkcs11Interop.HighLevelAPI
命名空间中的类,而不需要任何数字。
换句话说,您需要使用以下行
using Net.Pkcs11Interop.HighLevelAPI;
在代码中而不是
using Net.Pkcs11Interop.HighLevelAPI81;
有关详细信息,请参阅Pkcs11Interop library architecture,您还可以查看使用Net.Pkcs11Interop.HighLevelAPI
的{{3}}。