已更新
我正在尝试以编程方式设置一个COM +组件的ConstructorString,其值为以后的初始化。
有问题的代码在WinXP,Win2k3,Vista和Win2k8上运行良好。
我在Win7 - Home Premium版本上失败了。
我通过反复试验确定构造函数字符串似乎有一个大小限制 - 如果字符串是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))
答案 0 :(得分:1)
您如何使用dataOut
将其变成字符串?我现在不记得确切的细节,但我认为构造函数字符串是BSTR
。 dataOut
是一个字节缓冲区,因此在将其转换为字符串时需要非常小心,因此不要在嵌入的NUL字符上跳闸等。
您是否可以更新您的问题以包含从CryptProtectData
的输出缓冲区到字符串?