【问题标题】: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 文章,现在我在质疑是否应该使用反斜杠。

有什么建议吗?

【问题讨论】:

    标签: windows winapi windows-services named-pipes


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-06-05
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      相关资源
      最近更新 更多