Windows Vista上のIE7でのCrypt API利用
Crypt APIを使うためには、通常、CryptAcquireContextを使用して、暗号プロバイダのハンドルを取得しなければなりません。この時には、KB238187 CryptAcquireContext() use and troubleshootingにあるように、暗号プロバイダのキーセットが未初期化であった場合にNTE_BAD_KEYSETがエラーとして返ってきます。この場合は、明示的にキーセットを初期化しなければなりません。そのため、通常、この処理は次のようになります。
HCRYPTPROV hCryptProv; DWORD dwFlags = CRYPT_VERIFYCONTEXT; // KB238187 while(!CryptAcquireContext( &hCryptProv, NULL, NULL, PROV_RSA_FULL, dwFlags)) { if(GetLastError() == NTE_BAD_KEYSET) dwFlags |= CRYPT_NEWKEYSET; // Create a new keyset else throw CryptException("Cannot create a new keyset!"); } // やりたい作業を行う // ..... CryptReleaseContext(hCryptProv, 0);