Функция 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.