スマート カードに特定の証明書が含まれているかどうかを確認する必要があります。そのために、まず CryptAcquireContext を使用して HCRYPTPROV (CSP へのハンドル) を取得し、それを使用してシステム ストア (OpenSystemStore) を開き、証明書を列挙します。
Windows XP で完全に動作します。Windows 7 では、ストアに保存されている古い/古い証明書が原因で問題が発生します。Windows は、証明書をスマート カードからそのストアに保存/コピーします。つまり、スマート カードに Cert1 と Cert2 の 2 つの証明書があり、スマート カードを使用して Windows にログオンしたとします。次に、Windows はこれらの証明書をストアに保存します。[IE] -> [インターネット オプション] -> [コンテンツ] -> [証明書] に移動すると、それを確認できます。次に、スマート カードから Cert2 を削除すると、Windows ストアにも Cert2 が表示され、コードが壊れます。
そのため、Windows ストアではなくスマート カードでのみ利用可能な証明書を列挙する必要があります。