Программирование для Windows NT (том 2)

       

Функция GetNamedPipeHandleState


С помощью функции GetNamedPipeHandleState процесс может определить состояние канала Pipe, зная его идентификатор.

Прототип функции GetNamedPipeHandleState мы привели ниже:

BOOL GetNamedPipeHandleState(

  HANDLE  hNamedPipe,     // идентификатор именованного канала

  LPDWORD lpState,        // адрес флагов состояния канала

  LPDWORD lpCurInstances, // адрес количества реализаций

  LPDWORD lpMaxCollectionCount, // адрес размера пакета

                          // передаваемых данных

  LPDWORD lpCollectDataTimeout, // адрес максимального

                          // времени ожидания

  LPTSTR  lpUserName,     // адрес имени пользователя

                          // клиентского процесса

  DWORD   nMaxUserNameSize); // размер буфера для

                   // имени пользователя клиентского процесса

Идентификатор канала, для которого нужно определить состояние, передается функции GetNamedPipeHandleState через параметр hNamedPipe.

Через параметр lpState нужно передать указатель на переменную типа DWORD, в которую будет записан один из флагов состояния канала:



  

Флаги состояния

Описание

PIPE_WAIT

Канал будет работать в блокирующем режиме, когда процесс переводится в состояние ожидания до завершения операций в канале

PIPE_NOWAIT

Неблокирующий режим работы канала. Если операция не может быть выполнена немедленно, в неблокирующем режиме функция завершается с ошибкой

Если информация о состоянии канала не требуется, в качестве значения для параметра lpState следует использовать константу NULL.

В переменную, адрес которой передается через параметр lpCurInstances, записывается текущее количество реализаций канала. Если эта информация вам не нужна, передайте через параметр lpCurInstances значение NULL.

Параметры lpMaxCollectionCount и lpCollectDataTimeout позволяют определить, соответственно, размер пакета передаваемых данных и максимальное время ожидания между передачами.

Через параметр lpUserName вы должны передать указатель на буфер, в который функция GetNamedPipeHandleState запишет имя пользователя клиентского процесса. Размер этого буфера задается в параметре nMaxUserNameSize.

При необходимости вы можете задать значения параметров lpMaxCollectionCount, lpCollectDataTimeout и lpUserName как NULL. В этом случае соответствующая информация не будет извлекаться.

В случае успешного завершения функция GetNamedPipeHandleState возвращает значение TRUE, а при ошибке - FALSE. Код ошибки можно получить, вызвав функцию GetLastError.



Содержание раздела