Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [int] $CERT_STORE_PROV_SYSTEM = 10
- [int] $CERT_STORE_PROV_SYSTEM_REGISTRY_W = 13
- [int] $CERT_SYSTEM_STORE_LOCAL_MACHINE = 0x20000
- [int] $CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY = 0x80000
- [int] $CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE = 0x90000
- [int] $CERT_STORE_OPEN_EXISTING_FLAG = 0x00004000
- [int] $CERT_STORE_READONLY_FLAG = 0x00008000
- # find above consts at https://github.com/Microsoft/referencesource/blob/master/System/security/system/security/cryptography/cryptoapi.cs
- $flags = $CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE + $CERT_STORE_READONLY_FLAG + $CERT_STORE_OPEN_EXISTING_FLAG
- $signature = @'
- [DllImport("CRYPT32.DLL", EntryPoint="CertEnumCertificatesInStore", CharSet=CharSet.Auto, SetLastError=true)]
- public static extern IntPtr CertEnumCertificatesInStore(
- IntPtr storeProvider,
- IntPtr prevCertContext);
- [DllImport("CRYPT32.DLL", EntryPoint="CertOpenStore", CharSet=CharSet.Auto, SetLastError=true)]
- public static extern IntPtr CertOpenStoreStringPara(
- int storeProvider,
- int encodingType,
- IntPtr hcryptProv,
- int flags,
- String pvPara);
- [DllImport("CRYPT32.DLL", EntryPoint="CertCloseStore", CharSet=CharSet.Auto, SetLastError=true)]
- [return : MarshalAs(UnmanagedType.Bool)]
- public static extern bool CertCloseStore(
- IntPtr storeProvider,
- int flags);
- '@
- $type = Add-Type -MemberDefinition $signature `
- -Name Win32Utils -Namespace CertStore `
- -PassThru
- $certs = @()
- $store = $type::CertOpenStoreStringPara($CERT_STORE_PROV_SYSTEM_REGISTRY_W, 0, 0, $flags, "ROOT")
- $certID = ($type::CertEnumCertificatesInStore($store,0))
- While ($certID -ne 0) {
- $certs += ([System.Security.Cryptography.X509Certificates.X509Certificate2]($certID))
- $certID = ($type::CertEnumCertificatesInStore($store,$certID))
- }
- $type::CertCloseStore($store,$null)
- #Just for testing
- foreach ($cert in $certs) {
- $cert.Subject
- }
Advertisement
Add Comment
Please, Sign In to add comment