2

認証に X509 証明書を使用しています。SmartCard が取り外されると、次のような例外が発生することがあります (残念ながら例外テキストはドイツ語のみです...)。

「無効なユーザー ID」のような意味の「Ungültige Benutzerkennung」:

    bei System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException(Int32 hr)
    bei System.Security.Cryptography.SafeKeyHandle._FreeHKey(IntPtr pKeyCtx)
    bei System.Security.Cryptography.SafeKeyHandle.ReleaseHandle()
    bei System.Runtime.InteropServices.SafeHandle.InternalFinalize()
    bei System.Runtime.InteropServices.SafeHandle.Dispose(Boolean disposing)
    bei System.Runtime.InteropServices.SafeHandle.Finalize()

X509Certificate の実装をのぞき見しました。ガベージ コレクターが X509Certificate のファイナライザーを呼び出しているようです。X509Certificate オブジェクトには Win32 ハンドルが含まれています。現在、SmartCard が削除されると、対応する証明書も Windows 証明書ストアから削除されます。そのため、基になる Win32 ハンドルはおそらく、もう存在しない Win32 リソース (証明書ストア内の証明書) を参照しています。

私の問題は、ガベージ コレクターが起動した時点でファイナライザー内でスローされるため、この例外をキャッチして処理できないことです。この例外により、アプリケーション全体が破棄されます...

X509Certificate2.Reset() を明示的に呼び出そうとしましたが、ファイナライザーでエラーが引き続き発生します。

この問題を解決する方法についてのアイデアはありますか?

よろしく、 セバスチャン

4

0 に答える 0