nguyen_apt Ответов: 0

Список всех сертификатов смарт-карт недостаточно


Привет,
У меня есть приложение, запущенное на экране входа в систему windows как self reset password, которое позволит пользователю с помощью смарт-карты сбросить пароль. но то, что я получаю, когда открытый список сертификатов просто показывает некоторые из сертификатов (не все сертификаты в смарт-карте)

Я использую этот код для перечисления сертификатов

if (!NativeMethods.CryptAcquireContext(ref hProv, null, providerName, NativeMethods.PROV_RSA_FULL, NativeMethods.CRYPT_VERIFYCONTEXT))
           throw new Win32Exception(Marshal.GetLastWin32Error());
         uint pcbData = 0;

if (!NativeMethods.CryptGetProvParam(hProv, NativeMethods.PP_USER_CERTSTORE, null, ref pcbData, 0))
           throw new Win32Exception(Marshal.GetLastWin32Error());
         X509Certificate2 cert;

         X509Certificate2Collection certificate2Collection;

         X509Certificate2Collection certlist = new X509Certificate2Collection();

         List<X509Certificate2> certTempList = GetCertificates(providerName);

         foreach (var cer in certTempList)
         {                            
             certlist.Add(cer);                        
         }
certificate2Collection = X509Certificate2UI.SelectFromCollection(certlist, title, description, X509SelectionFlag.SingleSelection);


но в списке не показаны все сертификаты в смарт-карте (у меня есть 5 сертификатов, но просто покажите 3 в качестве примера)

Кто-нибудь может мне помочь?
Спасибо
/ Нгуен

Что я уже пробовал:

<pre lang="C#">if (!NativeMethods.CryptAcquireContext(ref hProv, null, providerName, NativeMethods.PROV_RSA_FULL, NativeMethods.CRYPT_VERIFYCONTEXT))
           throw new Win32Exception(Marshal.GetLastWin32Error());
         uint pcbData = 0;

if (!NativeMethods.CryptGetProvParam(hProv, NativeMethods.PP_USER_CERTSTORE, null, ref pcbData, 0))
           throw new Win32Exception(Marshal.GetLastWin32Error());
         X509Certificate2 cert;

         X509Certificate2Collection certificate2Collection;

         X509Certificate2Collection certlist = new X509Certificate2Collection();

         List<X509Certificate2> certTempList = GetCertificates(providerName);

         foreach (var cer in certTempList)
         {                            
             certlist.Add(cer);                        
         }
certificate2Collection = X509Certificate2UI.SelectFromCollection(certlist, title, description, X509SelectionFlag.SingleSelection);

</pre>

0 Ответов