命名管道名称可以有反斜杠吗?
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 命名管道中读取吗?