Могут ли имена именованных каналов иметь обратную косую черту? - PullRequest
6 голосов
/ 26 августа 2010

В соответствии с MSDN ,

[Имя канала] должно иметь следующую форму:

\\.\pipe\pipename

Пипенамечасть имени может содержать любой символ, кроме обратной косой черты, включая цифры и специальные символы.Вся строка имени канала может содержать до 256 символов.Имена каналов не чувствительны к регистру.

Но есть много примеров, когда я видел имена именованных каналов с обратными слешами в них.Например, стандартное имя канала для SQL Server: \\.\pipe\sql\query.

Запуск PipeList из SysInternals показывает множество каналов на моем компьютере, где имя содержит обратную косую черту.

Так может ли имя канала содержать обратную косую черту или нет?

Я спрашиваю, потому что я создавал службу с несколькими каналами с такими именами:

\\.\pipe\MyApp
\\.\pipe\MyApp\0
\\.\pipe\MyApp\1
\\.\pipe\MyApp\2

После первого каналабыло создано, создание других каналов завершится с ошибкой Windows 123 (ERROR_INVALID_NAME).Если бы я пропустил создание первого канала, все остальные, с символом обратной косой черты в имени, работали бы очень хорошо.

Похоже, что каналы являются иерархическими, как файловая система, и если у вас есть канал сконкретное имя, это имя больше нельзя использовать в качестве «папки» или контейнера для других каналов.

Пытаясь выяснить это, я наткнулся на статью MSDN и сейчас задаю вопросдолжен ли я использовать обратную косую черту вообще.

Любой совет?

1 Ответ

8 голосов
/ 30 января 2011

Хотя это выглядит недокументированным поведением, оно, по крайней мере, соответствует.Только не создавайте канал с тем же именем, что и «папка».Windows реализует именованные каналы как файловую систему внутри.Однако имейте в виду, что вредоносное приложение может создать канал \. \ Pipe \ MyApp и привести к сбою приложения.Учитывая, что единственными преимуществами использования обратной косой черты являются чисто семантические, я бы рекомендовал вместо этого использовать подчеркивание или другой символ.

...