gpt4 book ai didi

c++ - 无法在 Win7 上设置 COM 构造函数字符串 - CryptProtectData 更改?

转载 作者:太空宇宙 更新时间:2023-11-04 12:27:08 26 4
gpt4 key购买 nike

已更新

我正在尝试以编程方式为 COM+ 组件的 ConstructorString 设置一个值以供稍后初始化。

有问题的代码在 WinXP、Win2k3、Vista 和 Win2k8 上运行良好。

我在 Win7 - 家庭高级版上失败了。

我通过反复试验确定构造函数字符串似乎有大小限制 - 如果字符串为 512 个字符 (wchar) 或更少,它会保存。更长,并且对 CatalogCollection 对象的 SaveChanges 调用失败并出现 0x80110437 - COMADMIN_E_PROPERTYSAVEFAILED 错误。

事实证明,所有系统都有该限制 - 512 个字符。

我们使用 CryptProtectData 在将密码放入字符串之前对其进行加密。

在 win7 (x64) 上,字符串的输出比在 XP (x32) 和 W2k3 (x64) 上长。

那么 - CryptProtectData 已经改变 - 为什么输出变长了?

    if (!CryptProtectData(&dataIn,L" ",&optionalEntropy,NULL,NULL,
CRYPTPROTECT_LOCAL_MACHINE | CRYPTPROTECT_UI_FORBIDDEN, &dataOut))

最佳答案

你如何处理 dataOut 把它变成一个字符串?我现在不记得确切的细节了,但我假设构造函数字符串是 BSTRdataOut 是字节缓冲区,因此在将其转换为字符串时需要非常小心,以免被嵌入的 NUL 字符等绊倒。

您能否更新您的问题以包括从 CryptProtectData 的输出缓冲区到字符串的转换?

关于c++ - 无法在 Win7 上设置 COM 构造函数字符串 - CryptProtectData 更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1726541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com