Named Pipe(命名管道)是一种有名字的, 建立在pipe server和一个(或多个)pipe client之间的单向或双向的通信管道. 一个命名管道的所有实例都会共享一个相同的pipe name, 但是每个实例都有他自己的缓冲区和句柄(handle), 并且为客户端/服务器的通讯提供一个单独的导管. 这种对实例的使用使得多个pipe client同时地使用相同的named pipe成为可能.
任何进程都可以访问命名管道, 都可以接受安全检查, 这使得命名管道成为关联进程和非关联进程之间通信的一种简单方式.
任何进程都可以既做server, 又做client, 这使得点对点的对等通信成为可能. 正如这里用到的那样, 术语"pipe server”指的是创建named pipe的进程, 术语"pipe client"指的是连接到一个named pipe实例的进程. 供服务器端实例化一个命名管道的函数叫做CreateNamedPipe. 服务器端接受一个连接请求的函数叫做ConnectNamedPipe. 客户端是通过CreateFile 或 CallNamedPipe 函数来连接到命名管道的.
命名管道可以被用来在同一台机器的不同进程间提供通信, 或者在不同机器间通过网络为提供进程间通信. 如果一个服务器处于运行状态, 所有命名管道都可以是可以通过远程连接的. 如果你仅想要在本地使用named pipe, 你可以拒绝NT AUTHORITY\NETWORK帐号的访问, 或者去使用本地的local RPC.
Named Pipe是Server Message Block (SMB) 套件的一个网络协议, 基于Inter-process communication (IPC)共享. 使用SMB的IPC可以无缝的, 透明的转送用户的认证信息给命名管道. 即, 安全检查对于named pipe是完全可以的.
什么是SMB?
===================
SMB是一种重要的网络协议, 因为PC一般都有客户端或服务器进程处于运行状态. 所有的Windows操作系统都在要么作为客户端运行, 要么就在作为服务器运行, 要么二者都有.
SMB全称为Server Message Block, 是一种可以共享文件, 打印机, 特殊端口, 提供诸如named pipe, mail slot这类通信抽象的协议.
更多信息, 请参考<<Just what is SMB?>>.
如果Named Pipe报错, 那么有可能是SMB出了问题.
如何确定SMB有问题?
===================
运行下面的命令.
net use \\server
如果这个都失败, 说明SMB有问题. 请检查你的防火墙, 看看是不是SMB使用的端口被封禁了.
参考资料
===============
Named Pipes
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365590%28v=vs.85%29.aspx
Named pipe
http://en.wikipedia.org/wiki/Named_pipe
Just what is SMB?