1

更新

我正在尝试以编程方式将 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))
4

1 回答 1

1

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

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

于 2009-11-15T16:30:15.963 回答