none
ActiveX で WinScard.dll のメソッドをアクセスすると MethodAccessExceptionが発生 RRS feed

  • 質問

  • 皆さん、おはようございます。Icyfireです。

    現在ではカード認証をActiveX化にしております。

    ステップとしては、

    ①Htmlにボタンを押して、ActiveXのカード認証機能のOpenメソッドを呼び出す

    ※Openメソッドにカードリーダーの初期化処理を含まれている(PC/SC仕様)

    ②ユーザはカードをカードリーダーにかざす

    ③読み取ったIDをサーバに送って、認証する

    ④認証成功の場合、ユーザ情報をHTML画面に返す

     認証失敗の場合は、画面のキャンセルボタンを押されるまで、繰り返し認証を続ける

    上記のステップ①に、カードリーダー初期化処理時、MethodAccessExceptionが発生してしまいました。

    関連コード:

    ---------------------------

    private void GetUserInfo()

    {

         string strCardID = ListenPCSC();

         .......

    }

    private string ListenPCSC()

    {

       ........

       var hander = establishContext();

       ......

    }

    IntPtr establishContext()

    {

       ..........

      uint ret = SCardEstablishContext(SCARD_SCOPE_USER, IntPtr.Zero,.....);

    }

    [DllImport("winscard.dll")]

    public static extern unit SCardEstablishContext(uint dwScope, IntPtr pwReserved1, ... ...)

    上記、SCardEstablishContext メソッドを呼び出そうとするとき、MethodAccessExceptionが発生。

    エラー情報:

    ----------------------------------------------------------------------------------------------------

    [Security Transparent メソッド 'ActiveX.CardAuthenticationForm.establishContext()'がメソッド

    'ActiveX.CardAuthenticationForm.SCardEstablishCOntext(UInt32, IntPtr, IntPtr, IntPtr,...)'

    を使用してネイティブコードを呼び出そうと失敗しました。ネイティブコードを呼び出すには、メソッドはセキュリティ上

    情報またはセキュリティ上安全で重要でなければなりません。

    -----------------------------------------------------------------------------------------------------

    ActiveXの形で、Windwosシステム上のWinScard.dllへのアクセスが許可されないから、上記のエラーを発生してしまうと思い

    プロジェクトの参照にWinScard.dllを追加しようとも追加できません。

    「WinScard.dllへの参照追加できませんでした。ファイルがアクセス可能で、有効なアセンブリまたはCOMコンポーネントであることを確認してください。」

    MethodAccessExceptionを発生した原因はこれでしょうか、どなた様が助けて頂けないでしょうか

    2016年8月22日 1:28

回答