0

私たちの制度的プロジェクトに Pkcs11Interop ライブラリを使用しようとしています。しかし問題は、トークン カードから値を取得しようとすると、「保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが破損していることを示しています」というエラーが Pkcs11Interop から取得されることです。解決策が見つかりませんでした。助けてください、よろしくお願いします。

プロジェクトは、.Net Framework 4.5 で作成された Windows フォーム アプリケーションです。

エラー: system.accessviolationexception {"Attempted to read or write protected memory. This is often an indication that other memory is corrupt."}

エラー スタック トレース:

 at Net.Pkcs11Interop.HighLevelAPI40.Session.GetAttributeValue(ObjectHandle objectHandle, List`1 attributes)
   at Net.Pkcs11Interop.HighLevelAPI40.Session.GetAttributeValue(ObjectHandle objectHandle, List`1 attributes)
   at EFinImza.Program.Main() in c:\HttpRoot\EFinImza\EFinImza\Program.cs:line 56
   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

コードは次のようになります。

static void Main()
    {
        try
        {
            string pkcs11Library = @"C:\Windows\System32\akisp11.dll";
            using (var pkcs11 = new Net.Pkcs11Interop.HighLevelAPI40.Pkcs11(pkcs11Library, false, false))
            {
                LibraryInfo info = pkcs11.GetInfo();
                foreach (Slot slot in pkcs11.GetSlotList(false))
                {
                    SlotInfo slotInfo = slot.GetSlotInfo();
                    if (slotInfo.SlotFlags.TokenPresent)
                    {
                        TokenInfo tokenInfo = slot.GetTokenInfo();

                        Session session = slot.OpenSession(false);
                        String pin = "*****";
                        session.Login(CKU.CKU_USER, pin);

                        // get all objects using empty ObjectAttributes list
                        List<ObjectHandle> handles = session.FindAllObjects(new List<ObjectAttribute>());
                        List<CKA> attrs = new List<CKA>();
                        attrs.Add(CKA.CKA_LABEL);

                        foreach (ObjectHandle handle in handles)
                        {
                            List<ObjectAttribute> oAttrs = session.GetAttributeValue(handle, attrs);   **//Error is getting here**
                        }

                        session.CloseSession();
                    }
                }

                pkcs11.Dispose();
            }

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
        }
        catch (Exception ex)
        {
            throw ex;
        }

    }
4

1 に答える 1