認証に 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() を明示的に呼び出そうとしましたが、ファイナライザーでエラーが引き続き発生します。
この問題を解決する方法についてのアイデアはありますか?
よろしく、 セバスチャン