标签 CryptoAPI 下的文章

CryptAcquireContext返回NTE_EXISTS(0x8009000F)

CryptAcquireContext(&hProv, _T("test"), NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET);

最后一个参数为0表示获取某个key container的CSP(Crypto Service Provider),为CRYPT_NEWKEYSET时表示新建一个key container。以上语句两次运行,在第二次运行的时候_T("test")这个key container已经存在所以报错:NTE_EXISTS(0x8009000F)。应该加以判断:

bRet = CryptAcquireContext(&hProv, _T("test"), NULL, PROV_RSA_FULL, 0);
if (!bRet)
{
    if (dwRet=GetLastError() == NTE_EXISTS)
    {

        bRet = CryptAcquireContext(&hProv, _T("test"), NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET);
        if (!bRet)
        {
            dwRet = GetLastError();

        }
    }
}