[Pipe]跨域访问命名管道

发表于:2007-07-01来源:作者:点击数: 标签:
跨域访问命名管道 版本 创建时间 创建人 备注 1.0.0604.1 2003-6-4 郑 昀 第一稿 : 本文档将说明如何跨越两个互相不信任的 Windows 2000 域使用命名管道。问题最终解决,我有幸记录下了排查、解决问题的全过程。 继续阅读之前,我们假设您熟悉以下知识: n

跨域访问命名管道

 

版本

创建时间

创建人

备注

1.0.0604.1

2003-6-4

郑 昀

第一稿

 

 

 

 

本文档将说明如何跨越两个互相不信任的Windows 2000 域使用命名管道。问题最终解决,我有幸记录下了排查、解决问题的全过程。

 

继续阅读之前,我们假设您熟悉以下知识

n         Named Pipe

n         Access Control List

n         Discretionary Access Control List

n         IIS 5.0

 

现象

同事遇到了这么一个问题:

“我做了一个com(dll),这个com将被asp调用,连接到一个namedpipe。现在遇到了一些访问权限问题:

COMnamedpipe位于同一个计算机

       使用vbs测试,com可访问管道

       使用iis,则com不能访问管道,错误代码是:5,Access is denied.      

 

COMnamedpipe位于不同的域中的计算机,IISCOM位于同一个计算机

       使用vbs测试,com不能访问管道,错误代码:1326,Logon failure: unknown user name or bad password   

       使用iis,不能访问..错误代码是:5,Access is denied.

 

COMnamedpipe位于不同的域中的计算机

       但在COM所在计算机上使用 net use \\server2\pipe /USER:xxx

       指定了用户名,密码之后

       使用vbs测试,com可访问管道

       使用iis,不能访问..错误代码是:5,Access is denied.

 

综合起来,问题在于IIS进程调用的COM,访问另外的程序创建的命名管道时候,因权限问题而无法访问。”

解决步骤

需要做两步:

u      管道服务器端   在创建命名管道的时候,要明确指定DACL为NULL。如果不指定这一步,客户端将返回错误码:5(拒绝访问)。事实上只有管道创建者才可以访问管道。

u      客户端         客户端连接之前,使用WNetAddConnection2 进行网络连接登录。实际测试中发现,如果不进行这一步,运行结果返回错误码:1326。

 

DACL的指定

原文转自:http://www.ltesting.net