summaryrefslogtreecommitdiffstats
path: root/winpr/libwinpr/crypto/test/TestCryptoCertEnumCertificatesInStore.c
diff options
context:
space:
mode:
Diffstat (limited to 'winpr/libwinpr/crypto/test/TestCryptoCertEnumCertificatesInStore.c')
-rw-r--r--winpr/libwinpr/crypto/test/TestCryptoCertEnumCertificatesInStore.c86
1 files changed, 86 insertions, 0 deletions
diff --git a/winpr/libwinpr/crypto/test/TestCryptoCertEnumCertificatesInStore.c b/winpr/libwinpr/crypto/test/TestCryptoCertEnumCertificatesInStore.c
new file mode 100644
index 0000000..6b40c8d
--- /dev/null
+++ b/winpr/libwinpr/crypto/test/TestCryptoCertEnumCertificatesInStore.c
@@ -0,0 +1,86 @@
+
+
+#include <winpr/crt.h>
+#include <winpr/tchar.h>
+#include <winpr/crypto.h>
+
+#ifdef _WIN32
+//#define WITH_CRYPTUI 1
+#endif
+
+#ifdef WITH_CRYPTUI
+#include <cryptuiapi.h>
+#endif
+
+int TestCryptoCertEnumCertificatesInStore(int argc, char* argv[])
+{
+ int index = 0;
+ DWORD status = 0;
+ LPTSTR pszNameString = NULL;
+ HCERTSTORE hCertStore = NULL;
+ PCCERT_CONTEXT pCertContext = NULL;
+
+ WINPR_UNUSED(argc);
+ WINPR_UNUSED(argv);
+
+ /**
+ * System Store Locations:
+ * http://msdn.microsoft.com/en-us/library/windows/desktop/aa388136/
+ */
+
+ /**
+ * Requires elevated rights:
+ * hCertStore = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, (HCRYPTPROV_LEGACY) NULL,
+ * CERT_SYSTEM_STORE_LOCAL_MACHINE, _T("Remote Desktop"));
+ */
+
+ hCertStore = CertOpenSystemStore((HCRYPTPROV_LEGACY)NULL, _T("MY"));
+ // hCertStore = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, (HCRYPTPROV_LEGACY) NULL,
+ // CERT_SYSTEM_STORE_CURRENT_USER, _T("MY"));
+
+ if (!hCertStore)
+ {
+ printf("Failed to open system store\n");
+ return -1;
+ }
+
+ index = 0;
+
+ while ((pCertContext = CertEnumCertificatesInStore(hCertStore, pCertContext)))
+ {
+ status = CertGetNameString(pCertContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, NULL, NULL, 0);
+ if (status == 0)
+ return -1;
+
+ pszNameString = (LPTSTR)calloc(status, sizeof(TCHAR));
+ if (!pszNameString)
+ {
+ printf("Unable to allocate memory\n");
+ return -1;
+ }
+
+ status = CertGetNameString(pCertContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, NULL,
+ pszNameString, status);
+ if (status == 0)
+ {
+ free(pszNameString);
+ return -1;
+ }
+
+ _tprintf(_T("Certificate #%d: %s\n"), index++, pszNameString);
+
+ free(pszNameString);
+
+#ifdef WITH_CRYPTUI
+ CryptUIDlgViewContext(CERT_STORE_CERTIFICATE_CONTEXT, pCertContext, NULL, NULL, 0, NULL);
+#endif
+ }
+
+ if (!CertCloseStore(hCertStore, 0))
+ {
+ printf("Failed to close system store\n");
+ return -1;
+ }
+
+ return 0;
+}