Blame winpr/libwinpr/crypto/test/TestCryptoCertEnumCertificatesInStore.c

Packit 1fb8d4
Packit 1fb8d4
Packit 1fb8d4
#include <winpr/crt.h>
Packit 1fb8d4
#include <winpr/tchar.h>
Packit 1fb8d4
#include <winpr/crypto.h>
Packit 1fb8d4
Packit 1fb8d4
#ifdef _WIN32
Packit 1fb8d4
//#define WITH_CRYPTUI	1
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#ifdef WITH_CRYPTUI
Packit 1fb8d4
#include <cryptuiapi.h>
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
int TestCryptoCertEnumCertificatesInStore(int argc, char* argv[])
Packit 1fb8d4
{
Packit 1fb8d4
	int index;
Packit 1fb8d4
	DWORD status;
Packit Service 5a9772
	LPTSTR pszNameString;
Packit 1fb8d4
	HCERTSTORE hCertStore = NULL;
Packit 1fb8d4
	PCCERT_CONTEXT pCertContext = NULL;
Packit 1fb8d4
Packit 1fb8d4
	/**
Packit 1fb8d4
	 * System Store Locations:
Packit 1fb8d4
	 * http://msdn.microsoft.com/en-us/library/windows/desktop/aa388136/
Packit 1fb8d4
	 */
Packit 1fb8d4
Packit 1fb8d4
	/**
Packit 1fb8d4
	 * Requires elevated rights:
Packit Service 5a9772
	 * hCertStore = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, (HCRYPTPROV_LEGACY) NULL,
Packit Service 5a9772
	 * CERT_SYSTEM_STORE_LOCAL_MACHINE, _T("Remote Desktop"));
Packit 1fb8d4
	 */
Packit 1fb8d4
Packit Service 5a9772
	hCertStore = CertOpenSystemStore((HCRYPTPROV_LEGACY)NULL, _T("MY"));
Packit Service 5a9772
	// hCertStore = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, (HCRYPTPROV_LEGACY) NULL,
Packit Service 5a9772
	// CERT_SYSTEM_STORE_CURRENT_USER, _T("MY"));
Packit 1fb8d4
Packit 1fb8d4
	if (!hCertStore)
Packit 1fb8d4
	{
Packit 1fb8d4
		printf("Failed to open system store\n");
Packit 1fb8d4
		return -1;
Packit 1fb8d4
	}
Packit 1fb8d4
Packit 1fb8d4
	index = 0;
Packit 1fb8d4
Packit 1fb8d4
	while ((pCertContext = CertEnumCertificatesInStore(hCertStore, pCertContext)))
Packit 1fb8d4
	{
Packit 1fb8d4
		status = CertGetNameString(pCertContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, NULL, NULL, 0);
Packit 1fb8d4
		if (status == 0)
Packit 1fb8d4
			return -1;
Packit 1fb8d4
Packit Service 5a9772
		pszNameString = (LPTSTR)calloc(status, sizeof(TCHAR));
Packit 1fb8d4
		if (!pszNameString)
Packit 1fb8d4
		{
Packit 1fb8d4
			printf("Unable to allocate memory\n");
Packit 1fb8d4
			return -1;
Packit 1fb8d4
		}
Packit 1fb8d4
Packit Service 5a9772
		status = CertGetNameString(pCertContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, NULL,
Packit Service 5a9772
		                           pszNameString, status);
Packit 1fb8d4
		if (status == 0)
Packit 1fb8d4
		{
Packit Service 5a9772
			free(pszNameString);
Packit 1fb8d4
			return -1;
Packit 1fb8d4
		}
Packit 1fb8d4
Packit 1fb8d4
		_tprintf(_T("Certificate #%d: %s\n"), index++, pszNameString);
Packit 1fb8d4
Packit 1fb8d4
		free(pszNameString);
Packit 1fb8d4
Packit 1fb8d4
#ifdef WITH_CRYPTUI
Packit 1fb8d4
		CryptUIDlgViewContext(CERT_STORE_CERTIFICATE_CONTEXT, pCertContext, NULL, NULL, 0, NULL);
Packit 1fb8d4
#endif
Packit 1fb8d4
	}
Packit 1fb8d4
Packit 1fb8d4
	if (!CertCloseStore(hCertStore, 0))
Packit 1fb8d4
	{
Packit 1fb8d4
		printf("Failed to close system store\n");
Packit 1fb8d4
		return -1;
Packit 1fb8d4
	}
Packit 1fb8d4
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}