Составители:
Два  последних  параметра  используются  только  для  каналов,  устанавливающих 
связь с удаленным компьютером. Они определяют, каким образом система будет управ-
лять буферизацией в сети при передаче информации. Эти параметры не влияют на кана-
лы, созданные  с  атрибутом PIPE_FLAG_WRITE_THROUGH,  который  запрещает  буфе-
ризацию  в  сети.  Буферизация  дает  возможность  системе  комбинировать  несколько 
сообщений и передавать их одновременно, за один сеанс. Причем исходящие сообщения 
накапливаются в буфере до тех пор,  пока  не произойдет  заполнение буфера или не  за-
кончится заданный  временной интервал. Размер накопительного  буфера задается пара-
метром lpdwMaxCollect, а  значение  временного  интервала,  выраженное  в  миллисекун-
дах, - параметром lpdwCollectDataTimeout. 
Имеется три функции, позволяющие получить информацию о канале, не изменяя 
его атрибутов [12]. 
Первая функция является "двойником" функции SetNamedPipeHandleState(), одна-
ко  она  кроме  той  информации,  которая  устанавливается  функцией SetNamedPipeHan-
dleState(), позволяет получить много дополнительных сведений: 
BOOL GetNamedPipeHandleState( 
HANDLE hNamedPipe,    // дескриптор именованного канала  
LPDWORD lpdwModes,    // режимы чтения и ожидания  
LPDWORD lpdwInstances,    // количество экземпляров текущего канала  
LPDWORD lpcbMaxConnect,  // максимальное количество байтов, 
// накапливаемых до начала удаленной передачи  
LPDWORD lpdwConnectTimeout,  // максимальное время до начала удаленной 
// передачи  
LPTSTR lpszUserName,    // пользовательское имя процесса-клиента  
DWORD dwMaxUserNameBuff );  // размер буфера для хранения 
// пользовательского имени, выраженный 
// в количестве символов 
Параметр lpdwModes может  содержать  флаги PIPE_READMODE_MESSAGE  и 
PIPE_NOWAIT. Если ни один из этих флагов не установлен, применяются байтовый ре-
жим и режим ожидания, задаваемые по умолчанию. 
Параметр lpdwInstances позволяет  подсчитать  текущее  количество  экземпляров 
канала. Иными словами, этот параметр сообщает, сколько раз сервер вызывал функцию 
CreateNamedPipe() с одним и тем же именем канала. 
Параметры lpcbMaxConnect и lpdwConnectTimeout возвращают  ту  же  информа-
цию о сетевой буферизации, которая задается функцией SetNamedPipeHandleState(). 
Последние  два  параметра  указанной  функции  дают  серверу  возможность  полу-
чить информацию о клиенте. Они возвращают завершающиеся нулевым символом стро-
ки, которые идентифицируют пользователя, запустившего приложение-клиента, т.е. имя 
пользователя, введенное при  регистрации.  Это  имя связано  с  определенными конфигу-
рацией  системы  и  привилегиями  безопасности.  Имя  пользователя  может  понадобиться 
серверу для регистрации или отчетности, но скорее всего, этот параметр введен для со-
вместимости с OS/2, где он также используется. Параметр lpszUserName должен иметь 
значение NULL, если дескриптор hNamedPipe принадлежит клиенту или, иными слова-
ми, если он был создан функцией CreateFile (а не функцией CreateNamedPipe). 
Любому из параметров-указателей может быть присвоено значение NULL,
 что даст 
возможность проигнорировать значение, которое устанавливается по умолчанию. 
Дополнительная  информация  о  канале  может  быть  возвращена  и  посредством 
функции GetNamedPipeInfo(). Данная  функция  возвращает  атрибуты,  которые  нельзя 
183
      Два последних параметра используются только для каналов, устанавливающих
связь с удаленным компьютером. Они определяют, каким образом система будет управ-
лять буферизацией в сети при передаче информации. Эти параметры не влияют на кана-
лы, созданные с атрибутом PIPE_FLAG_WRITE_THROUGH, который запрещает буфе-
ризацию в сети. Буферизация дает возможность системе комбинировать несколько
сообщений и передавать их одновременно, за один сеанс. Причем исходящие сообщения
накапливаются в буфере до тех пор, пока не произойдет заполнение буфера или не за-
кончится заданный временной интервал. Размер накопительного буфера задается пара-
метром lpdwMaxCollect, а значение временного интервала, выраженное в миллисекун-
дах, - параметром lpdwCollectDataTimeout.
      Имеется три функции, позволяющие получить информацию о канале, не изменяя
его атрибутов [12].
      Первая функция является "двойником" функции SetNamedPipeHandleState(), одна-
ко она кроме той информации, которая устанавливается функцией SetNamedPipeHan-
dleState(), позволяет получить много дополнительных сведений:
BOOL GetNamedPipeHandleState(
     HANDLE hNamedPipe,              // дескриптор именованного канала
     LPDWORD lpdwModes,              // режимы чтения и ожидания
     LPDWORD lpdwInstances,          // количество экземпляров текущего канала
     LPDWORD lpcbMaxConnect,         // максимальное количество байтов,
                              // накапливаемых до начала удаленной передачи
     LPDWORD lpdwConnectTimeout, // максимальное время до начала удаленной
                                     // передачи
     LPTSTR lpszUserName,            // пользовательское имя процесса-клиента
     DWORD dwMaxUserNameBuff ); // размер буфера для хранения
                                     // пользовательского имени, выраженный
                                     // в количестве символов
      Параметр lpdwModes может содержать флаги PIPE_READMODE_MESSAGE и
PIPE_NOWAIT. Если ни один из этих флагов не установлен, применяются байтовый ре-
жим и режим ожидания, задаваемые по умолчанию.
      Параметр lpdwInstances позволяет подсчитать текущее количество экземпляров
канала. Иными словами, этот параметр сообщает, сколько раз сервер вызывал функцию
CreateNamedPipe() с одним и тем же именем канала.
      Параметры lpcbMaxConnect и lpdwConnectTimeout возвращают ту же информа-
цию о сетевой буферизации, которая задается функцией SetNamedPipeHandleState().
      Последние два параметра указанной функции дают серверу возможность полу-
чить информацию о клиенте. Они возвращают завершающиеся нулевым символом стро-
ки, которые идентифицируют пользователя, запустившего приложение-клиента, т.е. имя
пользователя, введенное при регистрации. Это имя связано с определенными конфигу-
рацией системы и привилегиями безопасности. Имя пользователя может понадобиться
серверу для регистрации или отчетности, но скорее всего, этот параметр введен для со-
вместимости с OS/2, где он также используется. Параметр lpszUserName должен иметь
значение NULL, если дескриптор hNamedPipe принадлежит клиенту или, иными слова-
ми, если он был создан функцией CreateFile (а не функцией CreateNamedPipe).
      Любому из параметров-указателей может быть присвоено значение NULL, что даст
возможность проигнорировать значение, которое устанавливается по умолчанию.
      Дополнительная информация о канале может быть возвращена и посредством
функции GetNamedPipeInfo(). Данная функция возвращает атрибуты, которые нельзя
                                        183
Страницы
- « первая
- ‹ предыдущая
- …
- 179
- 180
- 181
- 182
- 183
- …
- следующая ›
- последняя »
