我可以从Visual Studio生成的方法更改COM Interop方法的签名吗?
|
我们正在使用来自NET的第三方COM API。当前,Visual Studio和大概是TLBIMP用于生成Interop包装器DLL。
NET提供的一种特定方法的生成接口不是我们更喜欢使用的接口。是否可以更改COM互操作代码,以使呈现给NET的方法签名不同?我们无法更改使用的COM接口或TLB,因为它是第三方代码。
实际示例如下:
有问题的方法是通过一个明文密码。当前代码如下:
我们的密码处理返回System.Security.SecureString(密码在内存中加密)。
我们将SecureString编组为BSTR(令人讨厌的明文,但此后可以清零以减少暴露)。
BSTR转换为System.String(糟糕!这将是不可变的,可能永远不会进行垃圾回收,并将明文密码保留在内存中)。
包装第三方库的COM Interop函数使用System.String并将其再次编组到BSTR。
第三方COM API接收BSTR并希望以一种模糊的安全方式对其进行处理。
我要避免的是步骤2和3。我无法改变第三方API正在处理明文密码这一事实,但是我至少希望我们能够控制的代码可以最大程度地减少内存中明文的出现。
我想更改NET方法的签名以使用SecureString而不是String-NET已经可以将SecureString编组到BSTR,因此COM互操作代码仍可以向实际的COM API呈现相同的数据,但是没有创建字符串的可怕步骤。能做到吗?
没有找到相关结果
已邀请:
1 个回复
览幕堤分