代码之家  ›  专栏  ›  技术社区  ›  Eli

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

  •  1
  • Eli  · 技术社区  · 16 年前

    我正试图通过编程方式为COM+组件的构造函数字符串设置一个值,以供以后初始化。

    该代码在WinXP、Win2k3、Vista和Win2k8上运行良好。

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

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

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

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

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

    那么-CryptProtectData发生了变化-为什么输出更长?

        if (!CryptProtectData(&dataIn,L" ",&optionalEntropy,NULL,NULL,
        CRYPTPROTECT_LOCAL_MACHINE | CRYPTPROTECT_UI_FORBIDDEN, &dataOut))
    
    1 回复  |  直到 16 年前
        1
  •  1
  •   Kim Gräsman    16 年前

    你用它做什么 dataOut 把它变成一根绳子?我现在记不起确切的细节,但我假设构造函数字符串是 BSTR 数据输出 是一个字节缓冲区,所以在将其转换为字符串时需要非常小心,以免被嵌入的NUL字符等绊倒。

    CryptProtectData 串?

    推荐文章