[Pipe]跨域访问命名管道
<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog01.html" frameborder="0" width="728" scrolling="no" height="90"></iframe><div class="postText">跨域访问命名管道<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
文档版本
版本
创建时间
创建人
备注
1.0.0604.1
2003-6-4
郑 昀
第一稿
Implementation Scope:
本文档将说明如何跨越两个互相不信任的Windows 2000 域使用命名管道。问题最终解决,我有幸记录下了排查、解决问题的全过程。
继续阅读之前,我们假设您熟悉以下知识:
n Named Pipe
n Access Control List
n Discretionary Access Control List
n IIS 5.0
现象
同事遇到了这么一个问题:
“我做了一个com(dll),这个com将被asp调用,连接到一个namedpipe。现在遇到了一些访问权限问题:
COM和namedpipe位于同一个计算机
使用vbs测试,com可访问管道
使用iis,则com不能访问管道,错误代码是:5,Access is denied.
COM和namedpipe位于不同的域中的计算机,IIS与COM位于同一个计算机
使用vbs测试,com不能访问管道,错误代码:1326,Logon failure: unknown user name or bad password
使用iis,不能访问..错误代码是:5,Access is denied.
COM和namedpipe位于不同的域中的计算机
但在COM所在计算机上使用 net use \\server2\pipe /USER:xxx
指定了用户名,密码之后
使用vbs测试,com可访问管道
使用iis,不能访问..错误代码是:5,Access is denied.
综合起来,问题在于IIS进程调用的COM,访问另外的程序创建的命名管道时候,因权限问题而无法访问。”
解决步骤
需要做两步:
u 管道服务器端 在创建命名管道的时候,要明确指定DACL为NULL。如果不指定这一步,客户端将返回错误码:5(拒绝访问)。事实上只有管道创建者才可以访问管道。
u 客户端 客户端连接之前,使用WNetAddConnection2 进行网络连接登录。实际测试中发现,如果不进行这一步,运行结果返回错误码:1326。
<div style="border-right: #2459c3 2.25pt solid; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none;">DACL的指定
页:
[1]