BOOL CryptReleaseContext(HCRYPTPROV hProvider, DWORD Flags);
引数の意味は以下の通り。
| hProvider | 開放する鍵コンテナのハンドル |
| Flags | 0でなければならない |
void DispProvName()
{
HCRYPTPROV hProv;
BOOL bResult;
DWORD ErrorNo;
char *CspName[1000];
char *ContName[1000];
DWORD CspNameLen = 1000;
DWORD ContNameLen = 1000;
/* デフォルト鍵コンテナの取得 */
bResult = CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0);
ErrorNo = GetLastError();
/* 鍵コンテナが存在しないならば */
if(!bResult && ErrorNo == NTE_BAD_KEYSET) {
/* デフォルト鍵コンテナの生成 */
bResult = CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET);
ErrorNo = GetLastError();
}
/* 失敗? */
if(!bResult) {
printf("err(%08X).\n", ErrorNo);
return;
}
/* CSP名および鍵コンテナ名を取得 */
CryptGetProvParam(hProv, PP_NAME, (BYTE *)CspName, &CspNameLen, 0);
CryptGetProvParam(hProv, PP_CONTAINER, (BYTE *)ContName, &ContNameLen, 0);
/* CSP名および鍵コンテナ名を表示 */
printf("CSP Name: %s\n", CspName);
printf("Container Name: %s\n", ContName);
/* 鍵コンテナの開放 */
CryptReleaseContext(hProv, 0);
}