2010-08-26 76 views
3

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

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

\\.\pipe\pipename

名称的pipename部分可以 包括比一个 反斜杠以外的任何字符,包括数字和 特殊字符。整个管道 名称字符串最长可以有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文章,现在质疑我是否应该使用反斜杠。

有什么建议吗?

回答

6

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