// Cert251.cpp // #include "stdafx.h" #include #include #include #define CERT_SUBJ_STR L"電子証明書の所有者名に変えてください" int _tmain(int argc, _TCHAR* argv[]) { HCRYPTPROV hProv; HCERTSTORE hStore; // CSPハンドルの取得 if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, NULL)) { if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET)) { fprintf(stderr, "CryptAcquireContext error\n"); return 1; } } // 証明書ストアーのオープン hStore = CertOpenSystemStore( hProv, "MY"); if(!hStore) { fprintf(stderr, "CertOpenSystemStore error\n"); return 2; } // 自分の電子証明書の取り出し PCCERT_CONTEXT pcCert; char name[100]; pcCert = NULL; while(pcCert = CertFindCertificateInStore( hStore, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0, CERT_FIND_SUBJECT_STR, CERT_SUBJ_STR, pcCert)) { CertNameToStr(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, &pcCert->pCertInfo->Subject, CERT_SIMPLE_NAME_STR, name, 100); printf("Name: %s\n", name); break; } if(!pcCert) { fprintf(stderr, "指定された電子証明書が見つかりませんでした。\n"); return 3; } // 電子証明書詳細の表示 CryptUIDlgViewContext( CERT_STORE_CERTIFICATE_CONTEXT, // 電子証明書の詳細を表示 pcCert, // 表示する電子証明書 NULL, // 親ウインドウのハンドル NULL, // 表示されるウインドウのタイトル 0, NULL); // 証明書マネージャーの表示 CRYPTUI_CERT_MGR_STRUCT mgr; mgr.dwSize = sizeof(CRYPTUI_CERT_MGR_STRUCT); mgr.hwndParent = NULL; mgr.dwFlags = 0; mgr.pwszTitle = NULL; mgr.pszInitUsageOID = NULL; CryptUIDlgCertMgr(&mgr); // 後始末 CertFreeCertificateContext(pcCert); CertCloseStore(hStore, 0); CryptReleaseContext(hProv, 0); return 0; }