Операционные системы. Учебное пособие. Марапулец Ю.В. - 181 стр.

UptoLike

Составители: 

Два последних параметра используются только для каналов, устанавливающих
связь с удаленным компьютером. Они определяют, каким образом система будет управ-
лять буферизацией в сети при передаче информации. Эти параметры не влияют на кана-
лы, созданные с атрибутом 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