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



         

Установка соединения с каналом со стороны клиента


Для создания канала клиентский процесс может воспользоваться функцией CreateFile. Как вы помните, эта функция предназначена для работы с файлами, однако с ее помощью можно также открыть канал, указав его имя вместо имени файла. Забегая вперед, скажем, что функция CreateFile позволяет открывать не только файлы или каналы Pipe, но и другие системные ресурсы, например, устройства и каналы Mailslot.

Функция CreateFile была нами описана в предыдущем томе “Библиотеки системного программиста”, однако для удобства мы повторим прототип этой функции и ее краткое описание:

Итак, прототип функции CreateFile:

HANDLE CreateFile(

  LPCTSTR lpFileName,     // адрес строки имени файла

  DWORD  dwDesiredAccess, // режим доступа

  DWORD  dwShareMode, // режим совместного использования файла

  LPSECURITY_ATTRIBUTES lpSecurityAttributes, // дескриптор

                                              // защиты

  DWORD  dwCreationDistribution, // параметры создания

  DWORD  dwFlagsAndAttributes,   // атрибуты файла

  HANDLE hTemplateFile);  // идентификатор файла с атрибутами

Раньше при работе с файлами через параметр lpFileName вы передавали этой функции адрес строки, содержащей имя файла, который вы собираетесь создать или открыть. Строка должна быть закрыта двоичным нулем. Если функция CreateFile работает с каналом Pipe, параметр lpFileName определяет имя канала.

Параметр dwDesiredAccess определяет тип доступа, который должен быть предоставлен к открываемому файлу. В нашем случае этот тип доступа будет относиться к каналу Pipe. Здесь вы можете использовать логическую комбинацию следующих констант:

Константа

Описание

0

Доступ запрещен, однако приложение может определять атрибуты файла, канала или устройства, открываемого при помощи функции CreateFile

GENERIC_READ

Разрешен доступ на чтение из файла или канала Pipe

GENERIC_WRITE

Разрешен доступ на запись в файл или канал Pipe

Тип доступа, указанный при помощи параметра dwDesiredAccess, не должен противоречить типу доступа для канала, заданного при его создании функцией CreateNamedPipe.




Содержание  Назад  Вперед