从本地服务运行时,CryptProtectData在Windows XP上因NTE_BAD_KEYSET(0x80090016)错误而失败

时间:2016-05-30 10:14:14

标签: c++ windows winapi cryptoapi

我正在使用本地服务中的以下代码在将某些敏感数据保存到HKLM密钥之前对其进行加密:

LPCTSTR pStr = L"This is a plaintext string!";

DATA_BLOB blobIn;
blobIn.pbData = (BYTE*)pStr;
blobIn.cbData = lstrlen(pStr) * sizeof(TCHAR);

DATA_BLOB blobOut = {0};

if(::CryptProtectData(&blobIn, NULL, NULL, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN, &blobOut))
{
    //Success, use encrypted byte array from blobOut.pbData

    ::LocalFree(blobOut.pbData);
}

嗯,这种方法很好,除非在Windows XP上运行(在我的本地服务中运行。)CryptProtectData API失败,错误代码为NTE_BAD_KEYSET(0x80090016)。

知道如何让它在那里工作吗?

0 个答案:

没有答案