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

时间:2009-11-13 01:18:04

标签: c++ windows com windows-7 com+

已更新

我正在尝试以编程方式设置一个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))

1 个答案:

答案 0 :(得分:1)

您如何使用dataOut将其变成字符串?我现在不记得确切的细节,但我认为构造函数字符串是BSTRdataOut是一个字节缓冲区,因此在将其转换为字符串时需要非常小心,因此不要在嵌入的NUL字符上跳闸等。

您是否可以更新您的问题以包含从CryptProtectData的输出缓冲区到字符串?

的转换