2010-08-26 4 views
3

Selon MSDN,Les noms de tuyaux nommés peuvent-ils avoir des barres obliques inverses?

[Le nom du canal] doit avoir la forme suivante:

\\.\pipe\pipename

La partie pipename du nom peut inclure tout caractère autre qu'une barre oblique inverse , y compris les chiffres et caractères spéciaux. La chaîne de caractères peut contenir jusqu'à 256 caractères. Les noms de tuyaux ne sont pas sensibles à la casse.

Mais il y a beaucoup d'exemples où j'ai vu des noms de tuyaux nommés avec des barres obliques inverses. Par exemple, le nom de canal standard pour SQL Server est \\.\pipe\sql\query.

Exécution PipeList de SysInternals révèle beaucoup de tuyaux sur ma machine où le nom comprend un backslash. Par conséquent, un nom de canal peut-il contenir une barre oblique inverse ou non?

Je demande parce que je créais un service avec plusieurs tuyaux avec des noms comme celui-ci:

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

Après la première conduite a été créé, ce qui crée les autres tuyaux échouerait avec Windows erreur 123 (de ERROR_INVALID_NAME). Si je sautais en créant le premier tuyau, tous les autres, avec le caractère backslash dans le nom, fonctionneraient très bien. Il semble que les canaux sont hiérarchiques comme le système de fichiers et si vous avez un canal avec un nom particulier, ce nom ne peut plus être utilisé comme "dossier" ou conteneur pour d'autres canaux. En essayant de comprendre cela, je suis tombé sur l'article MSDN et je me demande maintenant si je devrais utiliser des anti-slash du tout.

Un conseil?

Répondre

6

Bien que cela semble être un comportement non documenté, il est au moins cohérent. Ne créez pas un tube avec le même nom qu'un 'dossier'. Windows implémente les canaux nommés en tant que système de fichiers en interne. Cependant, gardez également à l'esprit qu'une application malveillante peut créer un canal \. \ Pipe \ MyApp et provoquer l'échec de votre application. Considérant que les seuls avantages de l'utilisation de la barre oblique inverse sont purement sémantique, je recommanderais d'utiliser un trait de soulignement ou un autre caractère à la place.

Questions connexes