命名管道名称可以有反斜杠吗?

Posted

技术标签:

【中文标题】命名管道名称可以有反斜杠吗?【英文标题】:Can named pipe names have backslashes? 【发布时间】:2010-08-26 01:14:32 【问题描述】:

根据MSDN,

[管道名称] 必须具有 如下形式:

\\.\pipe\pipename

名称的管道名称部分可以 包括除 a 以外的任何字符 反斜杠,包括数字和 特殊的角色。整个管道 名称字符串最多可以是 256 长字符。管道名称不是 区分大小写。

但是有很多例子,我看到命名管道名称中带有反斜杠。例如,SQL Server 的标准管道名称是 \\.\pipe\sql\query

从 SysInternals 运行 PipeList 会发现我的机器上有很多管道,其中名称包含反斜杠。

那么,管道名称中是否可以包含反斜杠?

我问是因为我正在创建一个包含多个管道的服务,这些管道的名称如下:

\\.\pipe\MyApp
\\.\pipe\MyApp\0
\\.\pipe\MyApp\1
\\.\pipe\MyApp\2

创建第一个管道后,创建其他管道将失败,并出现 Windows 错误 123 (ERROR_INVALID_NAME)。如果我跳过创建第一个管道,那么名称中包含反斜杠字符的所有其他管道都可以正常工作。

似乎管道像文件系统一样是分层的,如果您有一个具有特定名称的管道,则该名称不能再用作其他管道的“文件夹”或容器。

在尝试解决这个问题时,我看到了 MSDN 文章,现在我在质疑是否应该使用反斜杠。

有什么建议吗?

【问题讨论】:

【参考方案1】:

虽然这似乎是未记录的行为,但至少是一致的。只是不要创建与“文件夹”同名的管道。 Windows 在内部将命名管道实现为文件系统。但是请记住,恶意应用程序可能会创建 \.\pipe\MyApp 管道并导致您的应用程序失败。考虑到使用反斜杠的唯一好处是纯语义,我建议使用下划线或其他字符。

【讨论】:

以上是关于命名管道名称可以有反斜杠吗?的主要内容,如果未能解决你的问题,请参考以下文章

命名管道客户端可以写入多个实例吗?

Python 可以从 Windows Powershell 命名管道中读取吗?

您可以使用单个命名管道客户端进行读写吗?

我可以将 cv::Mat 作为 JPEG 数据写入命名管道吗?

您可以通过命名管道自托管 ServiceStack 吗?

无法将命名管道名称分配给 LPTSTR 变量