DCOM:CoCreateInstanceEx 返回E_ACCESSDENIED

DCOM: CoCreateInstanceEx returns E_ACCESSDENIED

提问人:Isaac Moses 提问时间:8/22/2008 最后编辑:prakashIsaac Moses 更新时间:5/18/2010 访问量:15280

问:

我正在两台机器上使用服务器和客户端开发 DCOM 应用程序,这两台机器都运行 WinXP Service Pack 2。在两台机器上,我都使用相同的用户名和密码登录。

当一台计算机上的客户端调用 CoCreateInstanceEx 并要求另一台计算机启动服务器应用程序时,它将返回 E_ACCESSDENIED。

我尝试在 dcomcnfg 中进入服务器应用程序的组件属性,并为每个人提供所有内容的完整权限,但这无济于事。

我需要做些什么才能使此调用成功?

更新:当服务器应用程序在 Windows 2000 机器上运行时,我没有收到此错误;CoCreateInstanceEx 返回S_OK。

安全 Windows-XP DCOM

评论


答:

1赞 Shaun Austin 8/22/2008 #1

需要检查的三件事:

1) 返回 dcomcnfg 并尝试确保不仅访问安全性,而且“启动权限”部分都包含适当的安全用户或组。

2) 确保身份验证级别设置为“无”以外的其他值

3) 还要检查组件所在的磁盘位置是否实际可供您设置的安全权限中配置的帐户访问。

编辑:

还有一个:你是否也先调用 CoInitialiseSecurity() ?这敲响了警钟!

编辑2:

根据您的更新:尝试在两台 XP 计算机上完全删除防火墙,看看是否有所作为。您可能需要显式允许 DCOM 通过。

2赞 Shaun Austin 8/22/2008 #2

正确,因此,如果您的身份验证级别设置为默认。在默认设置中设置的身份验证级别是什么?只是出于兴趣。(尽管它适用于 2000 个盒子的事实可能会使这变得多余)

编辑:

另外:我似乎记得当我曾经玩/使用 DCOM 时做了很多重新启动,所以当您对 dcomcnfg 设置感到满意时,也许快速重新启动两台机器也不会出错。

评论

0赞 Isaac Moses 8/22/2008
@Shaun奥斯汀二世:全局默认身份验证级别设置为“连接”,默认模拟级别设置为“标识”。更新:...我尝试重新启动,但问题仍然存在。谢谢你的所有建议,但我仍然缺少一些东西。
0赞 Eli 1/15/2009 #3

顺便说一句,你的 Windows 2000 盒子是什么味道?专业版、服务器、高级服务器......

另外,两者之间的域成员资格之间是否存在差异(一个在域上,另一个不在域上,不同的域等...?

还有一件事 - DCOM 错误有时会出现在系统事件日志中 - 尤其是在创建对象时 - 您是否检查过那里的线索?

0赞 Rubinsh 2/1/2010 #4

我有完全相同的问题。 该问题发生在具有 XP SP2+ 操作系统或更高版本的计算机中。

我使用以下步骤解决了它:

  1. 验证客户端计算机和服务器计算机是否位于同一域中。

  2. 您需要在两台计算机中使用相同的用户,或者,如果要在客户端和服务器中使用不同的用户,则需要确保客户端和服务器用户在两台计算机上都具有权限(特别是 - 确保他们是分布式 COM 用户组的成员。

  3. 打开 Componenet 服务 MMC(运行 dcomcnfg)。

  4. 转到“我的电脑”->“属性”-“>默认属性”,并确保“默认防护级别”为“识别”

  5. 转到“COM 安全”选项卡,在“访问权限”和“启动和激活权限”中转到“编辑限制”,然后向 COM 应用程序的客户端和服务器用户添加本地和远程访问权限

  6. 确保应用程序在端口 135 中具有防火墙例外...

我希望这对你有所帮助!

2赞 Taneli Waltari 5/18/2010 #5

如果 PC 不是同一域的成员,您还需要向“ANONYMOUS LOGON”授予启动和访问权限。“每个人”不包括此内容。