相关疑难解决方法(0)

如何在DCOM中进行模拟?

我有一个使用OLE自动化编组器的DCOM客户端和服务器应用程序.它们在同一台PC上运行时工作正常,但当服务器位于不在同一域的不同PC上时,我得到E_ACCESSDENIED(0x80070005).

服务器PC配置了dcomcnfg,以便为我在客户端上指定的登录名和密码的用户提供对任何DCOM对象的所有访问权限.ServerApp及其类型库已在服务器pc上注册.

类型库也在客户端PC上注册.我直接在ClientApp中指定服务器名称,因此据我所知,客户端PC上不需要dcomcnfg配置.

具有服务器名称,登录名,域名和密码的CreateInstanceEx()工作正常.它返回IUnknown,同时在服务器PC上启动ServerApp.

但是当我尝试使用QueryInterface()获取服务器支持的接口时,我得到了E_ACCESSDENIED.

分析安全事件日志,我有两条记录:

首先,我在ClientApp中指定其凭据的用户成功进行网络登录.当我调用CreateInstanceEx()时会发生这种情况.

接下来,我在客户端PC上登录的用户登录尝试失败.由于两台PC不在域中,因此服务器PC不知道该用户.

现在,为什么这个用户会登录到服务器,特别是当我调用所有东西的QueryInterface时?

研究CreateInterfaceEx参数,似乎有某种模仿机制正在进行中.但目前还不清楚是谁冒充了谁.涉及三个用户凭据:

  1. ServerApp在服务器PC上运行的用户(在dcomcnfg中配置).

  2. 连接时ClientApp指定凭据的用户.

  3. ClientApp在客户端PC上运行其凭据的用户.

无论你如何看待它,如果涉及#3,那么它就是一个用户.如果DCOM要在服务器PC上识别/模仿#3,为什么我需要指定#2的凭证?到了什么地步?

DCOM冒充#2似乎是合乎逻辑的,因为这是我明确指定为我的凭据.但为什么第二次登录尝试呢?

有人可以解释模仿是如何工作的,还有一种方法可以忽略它并以dcomcnfg中指定的用户身份运行?

windows com remoting dcom

14
推荐指数
1
解决办法
5545
查看次数

标签 统计

com ×1

dcom ×1

remoting ×1

windows ×1