命名管道名称是否有反斜杠?

时间:2010-08-26 01:14:33

标签: windows winapi windows-services named-pipes

根据MSDN

  

[管道名称]必须具有   以下表格:

     

\\.\pipe\pipename

     

名称的pipename部分可以   包括除a之外的任何字符   反斜杠,包括数字和   特殊字符。整个管道   name字符串最多可以为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 个答案:

答案 0 :(得分:8)

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