我正在使用本地服务中的以下代码在将某些敏感数据保存到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)。
知道如何让它在那里工作吗?