根据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文章,现在正在质疑我是否应该使用反斜杠。
有什么建议吗?
答案 0 :(得分:8)
虽然这似乎是无证件行为,但它至少是一致的。只是不要创建一个与'文件夹'同名的管道。 Windows在内部将命名管道实现为文件系统。但是请记住,恶意应用程序可能会创建\。\ pipe \ MyApp管道并导致您的应用程序失败。考虑到使用反斜杠的唯一好处是纯语义,我建议使用下划线或其他字符。