public static void showChains(uint pStoreContext) { const uint X509_ASN_ENCODING = 0x00000001; const uint PKCS_7_ASN_ENCODING = 0x00010000; const uint CERT_CHAIN_FIND_BY_ISSUER = 1; const uint CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG = 0x4000; uint pChainContext = 0; if (pStoreContext == 0) { Console.WriteLine("No store is currently open."); return; } Win32.CERT_CHAIN_FIND_BY_ISSUER_PARA pvFindPara = new Win32.CERT_CHAIN_FIND_BY_ISSUER_PARA(); //get size of CERT_CHAIN_FIND_BY_ISSUER_PARA struct pvFindPara.cbSize = Marshal.SizeOf(pvFindPara); try { //get first chain pChainContext = Win32.CertFindChainInStore( pStoreContext, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG, CERT_CHAIN_FIND_BY_ISSUER, ref pvFindPara, 0 ); //get the rest while (pChainContext != 0) { displayChain(pChainContext); // display chains pChainContext = Win32.CertFindChainInStore( pStoreContext, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG, CERT_CHAIN_FIND_BY_ISSUER, ref pvFindPara, pChainContext); } return; } catch (Exception e) { Console.WriteLine("Error in " + e.Source + ": " + e.Message); return; } }
public static uint getChainFromStore(uint pStoreContext, int index) { const uint X509_ASN_ENCODING = 0x00000001; const uint PKCS_7_ASN_ENCODING = 0x00010000; const uint CERT_CHAIN_FIND_BY_ISSUER = 1; const uint CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG = 0x4000; uint pChainContext = 0; if (pStoreContext == 0) { Console.WriteLine("No store is currently open."); return(0); } Win32.CERT_CHAIN_FIND_BY_ISSUER_PARA pvFindPara = new Win32.CERT_CHAIN_FIND_BY_ISSUER_PARA(); //get size of CERT_CHAIN_FIND_BY_ISSUER_PARA struct pvFindPara.cbSize = Marshal.SizeOf(pvFindPara); try { //get the chain while (index > 0) { pChainContext = Win32.CertFindChainInStore( pStoreContext, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG, CERT_CHAIN_FIND_BY_ISSUER, ref pvFindPara, pChainContext); if (pChainContext == 0) { Console.WriteLine(" Couldn't find chain with index " + index); return(0); } index--; } return(pChainContext); } catch (Exception e) { Console.WriteLine("Error in " + e.Source + ": " + e.Message); return(0); } }
public static uint getChainFromStore(uint pStoreContext, int index) { const uint X509_ASN_ENCODING = 0x00000001; const uint PKCS_7_ASN_ENCODING = 0x00010000; const uint CERT_CHAIN_FIND_BY_ISSUER = 1; const uint CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG = 0x4000; uint pChainContext = 0; if (pStoreContext == 0) { Console.WriteLine("No store is currently open."); return 0; } Win32.CERT_CHAIN_FIND_BY_ISSUER_PARA pvFindPara = new Win32.CERT_CHAIN_FIND_BY_ISSUER_PARA(); //get size of CERT_CHAIN_FIND_BY_ISSUER_PARA struct pvFindPara.cbSize = Marshal.SizeOf(pvFindPara); try { //get the chain while (index > 0) { pChainContext = Win32.CertFindChainInStore( pStoreContext, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG, CERT_CHAIN_FIND_BY_ISSUER, ref pvFindPara, pChainContext); if (pChainContext == 0) { Console.WriteLine(" Couldn't find chain with index " + index); return 0; } index--; } return pChainContext; } catch (Exception e) { Console.WriteLine("Error in " + e.Source + ": " + e.Message); return 0; } }