Составители:
связанные процессы должны передавать друг другу дескрипторы иными средствами,
например с помощью механизма DDE или посредством совместно используемого файла.
Связь по анонимному каналу проще реализовать в том случае, если процессы связаны
друг с другом [12].
Создание именованных каналов. Многим системным объектам Windows NT при-
сваиваются идентифицирующие их строковые значения. Хотя команды создания имено-
ванных каналов могут компилироваться только в среде Windows NT, приложения, ис-
пользующие именованные каналы, работают и в среде Windows 98, где именованные
каналы функционируют точно так же, как и анонимные. Преимущество применения
именованных каналов заключается в том, что имена каналов позволяют процессам более
простым способом локализовать эти объекты. Анонимные объекты распознаются только
по своим дескрипторам, а дескрипторы действительны лишь в том процессе, где они
были созданы. С другой стороны, любой процесс, который знает имя объекта, может с
помощью операционной системы определить его место в иерархии. По имени система
может найти любой объект на другом сетевом компьютере.
Если канал имеет имя, программа-клиент не должна ожидать, когда сервер пере-
даст ей дескриптор этого канала. Вместо этого клиент может запросить дескриптор, вы-
звав функцию CreateFile() или CallNamedPipe(). В любом случае клиенту достаточно
знать имя канала. Родитель посредством командной строки может передать своему до-
чернему процессу строковое значение, содержащее имя канала. Кроме того, это значе-
ние может передаваться от одного произвольного процесса другому не связанному с
ним процессу с помощью совместно используемого файла или механизма DDE. Однако
чаще всего процессы, совместно использующие именованный канал, создаются одним и
тем же разработчиком, поэтому они заранее знают имя канала.
Перечисленные ниже функции работают только с именованными каналами (не
создавайте анонимных каналов, если вы хотите воспользоваться операциями, которые
выполняются с помощью этих функций):
CallNamedPipe() DisconnectNamedPipe() RevertToSelf()
ConnectNamedPipe() GetNamedPipeHandleState() SetNamedPipeHandleS-
tate()
CreateFile() GetNamedPipeInfo() TransactNamedPipe()
CreateNamedPipe() ImpersonateNamedPipeClient() WaitNamedPipe()
Рассмотрим основные функции более подробно. Для создания именованных кана-
лов предназначена функция CreateNamedPipe():
HANDLE CreateNamedPipe( LPTSTR lpszPipeName, // строка с именем нового канала
DWORD fdwOpenMode, // доступ, перекрытие и сквозная запись
DWORD fdwPipeMode, // тип, режимы чтения и ожидания
DWORD dwMaxInstances, // максимальное число экземпляров
DWORD dwOutBuf, // размер выходного буфера, байты
DWORD dwInBuf, // размер входного буфера/байты
DWORD dwTimeout, // время паузы, миллисекунды
LPSECURITY_ATTRIBUTES lpsa ); // привилегии доступа
Поскольку именованные каналы имеют больше возможностей по сравнению с ано-
нимными каналами, функция CreateNamedPipe() имеет больше параметров, чем функция
CreatePipe(). Рассмотрим значения параметров этой функции.
Параметр lpszPipeName указывает на строковое значение, которое будет играть
роль имени нового объекта. Операционная система записывает это имя в иерархическую
177
связанные процессы должны передавать друг другу дескрипторы иными средствами, например с помощью механизма DDE или посредством совместно используемого файла. Связь по анонимному каналу проще реализовать в том случае, если процессы связаны друг с другом [12]. Создание именованных каналов. Многим системным объектам Windows NT при- сваиваются идентифицирующие их строковые значения. Хотя команды создания имено- ванных каналов могут компилироваться только в среде Windows NT, приложения, ис- пользующие именованные каналы, работают и в среде Windows 98, где именованные каналы функционируют точно так же, как и анонимные. Преимущество применения именованных каналов заключается в том, что имена каналов позволяют процессам более простым способом локализовать эти объекты. Анонимные объекты распознаются только по своим дескрипторам, а дескрипторы действительны лишь в том процессе, где они были созданы. С другой стороны, любой процесс, который знает имя объекта, может с помощью операционной системы определить его место в иерархии. По имени система может найти любой объект на другом сетевом компьютере. Если канал имеет имя, программа-клиент не должна ожидать, когда сервер пере- даст ей дескриптор этого канала. Вместо этого клиент может запросить дескриптор, вы- звав функцию CreateFile() или CallNamedPipe(). В любом случае клиенту достаточно знать имя канала. Родитель посредством командной строки может передать своему до- чернему процессу строковое значение, содержащее имя канала. Кроме того, это значе- ние может передаваться от одного произвольного процесса другому не связанному с ним процессу с помощью совместно используемого файла или механизма DDE. Однако чаще всего процессы, совместно использующие именованный канал, создаются одним и тем же разработчиком, поэтому они заранее знают имя канала. Перечисленные ниже функции работают только с именованными каналами (не создавайте анонимных каналов, если вы хотите воспользоваться операциями, которые выполняются с помощью этих функций): CallNamedPipe() DisconnectNamedPipe() RevertToSelf() ConnectNamedPipe() GetNamedPipeHandleState() SetNamedPipeHandleS- tate() CreateFile() GetNamedPipeInfo() TransactNamedPipe() CreateNamedPipe() ImpersonateNamedPipeClient() WaitNamedPipe() Рассмотрим основные функции более подробно. Для создания именованных кана- лов предназначена функция CreateNamedPipe(): HANDLE CreateNamedPipe( LPTSTR lpszPipeName, // строка с именем нового канала DWORD fdwOpenMode, // доступ, перекрытие и сквозная запись DWORD fdwPipeMode, // тип, режимы чтения и ожидания DWORD dwMaxInstances, // максимальное число экземпляров DWORD dwOutBuf, // размер выходного буфера, байты DWORD dwInBuf, // размер входного буфера/байты DWORD dwTimeout, // время паузы, миллисекунды LPSECURITY_ATTRIBUTES lpsa ); // привилегии доступа Поскольку именованные каналы имеют больше возможностей по сравнению с ано- нимными каналами, функция CreateNamedPipe() имеет больше параметров, чем функция CreatePipe(). Рассмотрим значения параметров этой функции. Параметр lpszPipeName указывает на строковое значение, которое будет играть роль имени нового объекта. Операционная система записывает это имя в иерархическую 177
Страницы
- « первая
- ‹ предыдущая
- …
- 173
- 174
- 175
- 176
- 177
- …
- следующая ›
- последняя »