修复MS最新安全更新导致的问题(Win 10 KB4056892)

时间:2018-01-16 22:23:24

标签: vb6 activex dcom

我有一个使用Activex服务器的应用程序(用VB6编写 - 请不要使用火焰)。

有一个工作站组件和两个activex服务器组件。计算机上的全局DCOM权限设置为“Connect”和“Identify”,服务器组件上的身份验证设置为“None”,并且与DCOM中的activex服务器关联的身份在相关计算机上具有完全管理权限

全局dcom中还有一些条目授予匿名登录本地和远程访问权限,以便客户端exe和activex服务器之间的回调能够正常运行。

为了使这个与客户端一起工作,VB6必须显式调用CoInitialize:

        Dim lngHr As Long
        Dim lngAuthn As Long
        lngAuthn = RPC_C_AUTHN_DEFAULT
        blnSecurityCalled = True
        lngHr = CoInitializeSecurity(ByVal API_NULL, -1, _
            lngAuthn, ByVal API_NULL, _
            RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_ANONYMOUS, _
            API_NULL, EOAC_NONE, ByVal API_NULL)
       If (S_OK <> lngHr) Then
            MsgBox "CoInitializeSecurity failed with error code: 0x" _
            & Trim$(Str$(Hex(lngHr))), vbCritical, _
            "Application Initialization Failure"
            Exit Sub

在最新的Windows更新之前,这种方法很有用,它引入了MS记录的问题。 MS建议用RPC_C_AUTHN_LEVEL_CALL替换RPC_C_AUTHN_LEVEL_NONE,但这还不够。

Coinitialize调用没有返回错误代码,因为在这种情况下我应该看到“CoinitializeSecurity Failed”消息。

相反,在必须创建对服务器组件的引用后几步:

ErrSubject = "Calling ClsServer "
Set Server = CreateObject("ASIServer.clsServer")

这句话失败了。它返回“Object Required”消息。如果我通过VB6 IDE(不运行Coinitialize)运行完全相同的代码,则应用程序运行时没有错误。

仅在安装了Windows 10更新时才会出现此问题。如果我卸载它,一切都会再次运行。

只是想知道是否有人对如何继续使用此补丁的应用程序有任何想法,因为谁知道MS何时将正式解决他们在1月3日创建的问题。

2 个答案:

答案 0 :(得分:1)

感谢您的所有建议。

我已经确认,当Microsoft使用此修补程序发布更新时,它将解决问题。

他们正在推出它 - 它还没有适用于所有版本的Windows。任何比Windows 8更旧的东西都不会出现这个问题。

答案 1 :(得分:0)

尝试RPC_C_AUTHN_LEVEL_CONNECTRPC_C_IMP_LEVEL_IDENTIFY(而不是RPC_C_IMP_LEVEL_ANONYMOUS),看看是否有帮助。