Составители:
// информации
DWORD dwWriteBufSize, // размер буфера записи, байты
LPVOID lpvReadBuf, // буфер для полученной информации
DWORD dwReadBufSize, // размер буфера чтения, байты
LPDWORD lpdwBytesRead, // реально прочитанное количество
байтов
// (возвращаемое значение)
LPOVERLAPPED lpOverlapped ); // поддержка асинхронного ввода/вывода
Несмотря на обилие параметров, функция TransactNamedPipe() действует доста-
точно "прямолинейно". Она записывает в канал содержимое буфера lpvWriteBuf, ожида-
ет ответа и копирует полученное сообщение в буфер lpvReadBuf.
Функция TransactNamedPipe() выдает сообщение об ошибке в том случае, если ка-
нал имеет неправильные атрибуты или если буфер чтения слишком мал для размещения
всего принятого сообщения. При этом функция GetLastError() возвращает значение ER-
ROR_MORE_DATA, и вы должны закончить чтение сообщения с помощью функций
ReadFile() или PeekNamedPipe().
Функция TransactNamedPipe() осуществляет одну операцию обмена информацией
по каналу. Установив соединение, программа может вызывать данную команду много
раз, не разрывая связи.
Функция CallNamedPipe() предназначена для тех клиентов, которые должны вы-
полнить однократную транзакцию. Она устанавливает соединение, читает информацию
из канала и записывает ее в канал, после чего разрывает связь.
BOOL CallNamedPipe(
LPTSTR lpszPipeName, // указатель строки с именем объекта-канала
LPVOID lpvWriteBuf, // буфер для хранения передаваемой информации
DWORD dwWriteBuf, // размер буфера записи, байты
LPVOID lpvReadBuf, // буфер для хранения принимаемой информации
DWORD dwReadBuf, // размер буфера чтения, байты
LPDWORD lpdwRead, // реально прочитанное количество байтов
// (возвращаемое значение)
DWORD dwTimeout ); // максимальное время ожидания, миллисекунды
В качестве первого параметра функции CallNamedPipe() должно задаваться имя
уже существующего канала. Данная функция может вызываться только клиентами. Ос-
тальные параметры, точнее большая их часть, описывают буферы, необходимые для
двухсторонней поддержки транзакции.
Функция CallNamedPipe() комбинирует в одной операции несколько команд, а
именно:WaitNamedPipe(), CreateFile(), WriteFile(), ReadFile() и CloseHandle(). Последний
параметр, dwTimeout, задает максимальное время ожидания для команды WaitNamed-
Pipe().
Если буфер чтения слишком мал для записи всего принятого сообщения, функция
считывает максимально возможный объем информации и возвращает значение FALSE.
В этом случае функция GetLastError() возвращает значение ERROR_MORE_DATA, и
поскольку канал уже закрыт, оставшиеся в нем данные исчезают.
Клиенты часто посылают серверу по каналу команды или запросы на выполнение
определенных действий от своего имени. Так, клиент может попросить сервер прочи-
тать информацию из файла. Поскольку клиент и сервер - это разные процессы, часто они
имеют разные атрибуты безопасности. Сервер может отказаться от выполнения команд,
прав на выполнение которых у клиента недостаточно. Сервер может временно (на время
188
// информации DWORD dwWriteBufSize, // размер буфера записи, байты LPVOID lpvReadBuf, // буфер для полученной информации DWORD dwReadBufSize, // размер буфера чтения, байты LPDWORD lpdwBytesRead, // реально прочитанное количество байтов // (возвращаемое значение) LPOVERLAPPED lpOverlapped ); // поддержка асинхронного ввода/вывода Несмотря на обилие параметров, функция TransactNamedPipe() действует доста- точно "прямолинейно". Она записывает в канал содержимое буфера lpvWriteBuf, ожида- ет ответа и копирует полученное сообщение в буфер lpvReadBuf. Функция TransactNamedPipe() выдает сообщение об ошибке в том случае, если ка- нал имеет неправильные атрибуты или если буфер чтения слишком мал для размещения всего принятого сообщения. При этом функция GetLastError() возвращает значение ER- ROR_MORE_DATA, и вы должны закончить чтение сообщения с помощью функций ReadFile() или PeekNamedPipe(). Функция TransactNamedPipe() осуществляет одну операцию обмена информацией по каналу. Установив соединение, программа может вызывать данную команду много раз, не разрывая связи. Функция CallNamedPipe() предназначена для тех клиентов, которые должны вы- полнить однократную транзакцию. Она устанавливает соединение, читает информацию из канала и записывает ее в канал, после чего разрывает связь. BOOL CallNamedPipe( LPTSTR lpszPipeName, // указатель строки с именем объекта-канала LPVOID lpvWriteBuf, // буфер для хранения передаваемой информации DWORD dwWriteBuf, // размер буфера записи, байты LPVOID lpvReadBuf, // буфер для хранения принимаемой информации DWORD dwReadBuf, // размер буфера чтения, байты LPDWORD lpdwRead, // реально прочитанное количество байтов // (возвращаемое значение) DWORD dwTimeout ); // максимальное время ожидания, миллисекунды В качестве первого параметра функции CallNamedPipe() должно задаваться имя уже существующего канала. Данная функция может вызываться только клиентами. Ос- тальные параметры, точнее большая их часть, описывают буферы, необходимые для двухсторонней поддержки транзакции. Функция CallNamedPipe() комбинирует в одной операции несколько команд, а именно:WaitNamedPipe(), CreateFile(), WriteFile(), ReadFile() и CloseHandle(). Последний параметр, dwTimeout, задает максимальное время ожидания для команды WaitNamed- Pipe(). Если буфер чтения слишком мал для записи всего принятого сообщения, функция считывает максимально возможный объем информации и возвращает значение FALSE. В этом случае функция GetLastError() возвращает значение ERROR_MORE_DATA, и поскольку канал уже закрыт, оставшиеся в нем данные исчезают. Клиенты часто посылают серверу по каналу команды или запросы на выполнение определенных действий от своего имени. Так, клиент может попросить сервер прочи- тать информацию из файла. Поскольку клиент и сервер - это разные процессы, часто они имеют разные атрибуты безопасности. Сервер может отказаться от выполнения команд, прав на выполнение которых у клиента недостаточно. Сервер может временно (на время 188
Страницы
- « первая
- ‹ предыдущая
- …
- 184
- 185
- 186
- 187
- 188
- …
- следующая ›
- последняя »