Здравствуйте Alex Fedotov, Вы писали:
AF>Здравствуйте The Lex, Вы писали:
TL>>Проблемка такая, однако: Named Pipe при использовании между процессами на локальной машине (да еще я и с правами администратора сижу) все работает отлично. На разных машинах работает, ежели на машине-сервере прописать себя как администатора. Но это, разумеется, очень нехорошо. Так вот вопрос: как это все протащить, чтобы можно было... Э-э-э... Даже не знаю, как именно это определить. :(
AF>В вызов CreateNamedPipe нужно передать security descriptor with NULL DACL. Пример создания такого дескриптора есть в MSDN, ключевые слова для поиска "NULL DACL".
Так оно, конечно, работает.
А почему не работают другие методы? Например, я хочу добавить/изменить права доступа для какого-то юзера или группы. Причем уже после того, как Named Pipe создан (клиенты еще не подключались). Для обычного файла я могу это сделать несколькими способами:
1. GetNamedSecurityInfo(), получаю Dacl, на его основе создаю новый с нужными ACE, потом SetNamedSecurityInfo().
2. GetSecurityInfo()/SetSecurityInfo(): аналогично, но через HANDLE нужного файла.
3. GetFileSecurity()/SetFileSecurity().
С файлами все нормально работает. Например, задаю маску GENERIC_READ | GENERIC_WRITE, а потом в обычном Explorer'e смотрю permissions. Все как положено: Special access (RW).
А пробую применять эти функции для Named Pipe, возникают проблемы. Если Named Pipe создан другим процессом, получаю сообщ. "The specified resource name can not be found in the image file".
Если же задаю permissions сразу после вызова CreateNamedPipe в той же программе, то ошибок не возникает. А если из другой программы прочитать эти Permissions, то видно, что они изменились. Но зато когда клиент обращается к такому Pipe (даже локально!), появляется сообщение, что нет свободных экземпляров Pipe (хотя ни одного клиента еще не подключилось).
Еще можно понять (и то — с большой натяжкой), почему не работает GetNamedSecurityInfo. В MSDN написано, что эта ф-я работает с файлами. А про GetSecurityInfo написано, что она работает и с Named Pipes, но на самом деле — не работает: "The specified resource name can not be found in the image file".
Неужели нельзя изменить Permissions после создания Pipe?
Это баг в NT или просто у меня знаний маловато?