Windows管道系统 - 命名管道

论坛 期权论坛     
选择匿名的用户   2021-5-23 01:38   402   0
<h2>命名管道</h2>
<p class="MsoNormal" style="line-height: 150%;">一个命名管道是一个有名的、用于管道服务端与一个或多个管道客户端进行单路<span style="line-height: 150%;">(“</span><span style="line-height: 150%;">One-way</span><span style="line-height: 150%;">”)或双向通讯的管道。一个命名管道的所有实例共享同一个管道名字,但是每一个实例都有它自己的管道句柄和缓冲区,并为客户</span><span style="line-height: 150%;">/</span><span style="line-height: 150%;">服务端的通讯提供独立的通讯渠道。管道实例的使用可以让多个管道客户端同时使用同一个命名管道。</span></p>
<p class="MsoNormal" style="line-height: 150%;">任何进程都可以访问命名管道,并接受安全权限的检查,通过命名管道使相关的或不相关的进程之间的通讯变得异常简单!</p>
<p class="MsoNormal" style="line-height: 150%;">任何进程都可以扮演服务端和客户端双重角色,这一点使点对点双向通讯成为可能。在这里,管道服务端进程指的是创建命名管道的一端,而管道客户端指的是连接到命名管道某个实例的一端。</p>
<p class="MsoNormal" style="line-height: 150%;">命名管道可以用在为本机或不同计算机(跨网络)的进程之间提供通讯的场合,。如果服务端的服务正在运行,那么所有的命名管道都可以通过网络进行远程访问。如果你只关注命名管道的本机应用场景,那么你完全可以禁止<span style="font-size: 8.5pt; color: black; line-height: 150%;">NT AUTHORITY/NETWORK</span>用户访问该命名管道(通过设置管道的安全描述符)或者用本机RPC通讯机制来作为替代方案。</p>
<h3>管道命名</h3>
<p class="MsoNormal" style="line-height: 150%;">每个命名管道都有一个全局惟一的名字以示和其它命名管道的区别。管道服务端在调用<span style="font-size: 8.5pt; color: black; line-height: 150%;"><strong>CreateNamedPipe</strong></span>函数创建一个或多个命名管道实例时会为管道指定一个名字,而管道客户端当调用<strong><span style="font-size: 8.5pt; color: black; line-height: 150%;">CreateFile</span></strong>或<span style="font-size: 8.5pt; color: black; line-height: 150%;"><strong>CallNamedPipe</strong></span>函数连接命名管道某个实例时会指定要连接的命名管道的名字。</p>
<p class="MsoNormal" style="line-height: 150%;">当在<strong><span style="font-size: 8.5pt; color: black; line-height: 150%;">CreateFile</span></strong><strong><span style="font-size: 8.5pt; color: black; line-height: 150%;">、</span></strong><span style="font-size: 8.5pt; color: black; line-height: 150%;"><strong>WaitNamedPipe</strong></span>或<span style="font-size: 8.5pt; color: black; line-height: 150%;"><strong>CallNamedPipe</strong></span>函数中指定管道的名字时请使用如下命名格式:</p>
<p class="MsoNormal" style="line-height: 150%;"><span style="font-size: 8.5pt; color: black; line-height: 150%;">//<em>ServerName</em>/pipe/<em>PipeName</em></span></p>
<p class="MsoNormal" style="line-height: 150%;">其中<em><span style="font-size: 8.5pt; color: black; line-height: 150%;">ServerName</span></em>域是远程或本地计算机的名字,而管道的名字字符串则是由<em><span style="font-size: 8.5pt; color: black; line-height: 150%;">PipeName</span></em>域来指定的,它可以包含除了<span style="line-height: 150%;">反斜杠以外的所有字符,包括数字和特殊字符,整个管道的名字字符串最长可以有</span><span style="line-height: 150%;">256</span><span style="line-height: 150%;">个字符。注意:<strong><span style="color: red;">管道名字不区分大小写!</span></strong></span></p>
<p class="MsoNormal" style="margin-left: 71.9pt; line-height: 150%;"><strong><span style="font-size: 9pt; color: black; line-height: 150%;">Windows Me</span></strong><strong><span style="font-size: 9pt; color: black; line-height: 150%;">、</span></strong><strong><span style="font-size: 9pt; color: black; line-height: 150%;">98</span></strong><strong><span style="font-size: 9pt; color: black; line-height: 150%;">、</span></strong><strong><span style="font-size: 9pt; color: black; line-height: 150%;">95</span></strong><span style="font-size: 9pt; color: black; line-height: 150%;">: </span><span style="font-size: 9pt; color: black; line-height: 150%;">管道名字不能包含冒号</span></p>
<p class="MsoNormal" style="line-height: 150%;">管道服务端不能在另外一台计算机上创建一个管道(也就是说对于管道服务端而言,它只能创建本机命名管道,远程命名管道是对管道客户端而言的),因此<span style="font-size: 8.5pt; color: black; line-height: 150%;"><strong>CreateNamedPipe</strong></span>函数必须使用一个用句号代替的<em><span style="font-size: 8.5pt; color: black; line-height: 150%;">ServerName</span></em>域名,格式如下:</p>
<p class="MsoNormal" style="line-height: 150%;"><span style="font-size: 8.5pt; color: black; line-height: 150%;">//./pipe/<em>PipeName</em></span
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP