//private int GetCertificateCount(string storeName, StoreLocation storeLocation) //{ // return Do(store => store.Certificates.Count, storeName, storeLocation); // //var store = Capi32.GetCertificateStore(storeName, storeLocation); // //var x509Store = store.GetX509Store(); // //x509Store.Open(OpenFlags.ReadOnly); // //var count = x509Store.Certificates.Count; // //x509Store.Close(); // //return count; //} private T Do <T>(Func <X509Store, T> function, string storeName, StoreLocation storeLocation) { var store = Capi32.GetCertificateStore(storeName, storeLocation); var x509Store = store.GetX509Store(); x509Store.Open(OpenFlags.ReadOnly); var result = default(T); try { result = function(x509Store); } finally { x509Store.Close(); } return(result); }
public static void Test() { var systemStore = Capi32.GetSystemStores(CertificateStoreLocation.FromStoreLocation(StoreLocation.LocalMachine)).First(); var store = systemStore.GetX509Store(); // See http://msdn.microsoft.com/en-us/library/aa376559%28VS.85%29.aspx : CERT_STORE_PROV_PHYSICAL //var store = new X509Store(systemStore.Name + "\\.Default", systemStore.Location.ToStoreLocation()); store.Open(OpenFlags.ReadOnly); var certificates = store.Certificates; var crls = store.GetCertificateRevocationLists(); store.Close(); MessageBox.Show(string.Format("Certificates Count = {0}\r\nCrls Count = {1}", certificates.Count, crls.Count())); }
/// <summary> /// Fills the nodes of the treeview. /// </summary> private void FillNodes() { // The nodes rootNode = new TreeNodeEx(SR.CertificateStores); rootNode.ImageIndex = STORES_IMAGE; rootNode.SelectedImageIndex = STORES_IMAGE; tvStores.Nodes.Add(rootNode); // 1st level: locations IEnumerable <CertificateStoreLocation> locations = null; if (ShowOtherLocations) { locations = Capi32.GetSystemStoreLocations(); } else { locations = new StoreLocation[] { StoreLocation.LocalMachine, StoreLocation.CurrentUser } }.Select(l => CertificateStoreLocation.FromStoreLocation(l));