Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответ - Екзаменаційні питання з курсу ОС.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.59 Mб
Скачать

Коммуникационные ресурсы

Функция CreateFile может создать дескриптор коммуникационного ресурса (обмена данными), такого как последовательный порт COM1. Для коммуникационных ресурсов параметрdwCreationDisposition  должен быть OPEN_EXISTING, а параметр hTemplate должен иметь значение ПУСТО (NULL).  Доступ к операциям чтения, записи или чтения-записи может быть определен, а дескриптор может открыться для асинхронной операции ввода-вывода. Дополнительную информацию об обмене информацией, см. раздел Коммуникационные ресурсы.

Консоли

Функция CreateFile может создать дескриптор консольного ввода данных (CONIN$). Если процесс имеет открытый дескриптор для него, как результат наследования или дублирования, он может также создать и дескриптор активного экранного буфера (CONOUT$). Вызывающий процесс должен быть присоединен к унаследованной консоли или консоли назначенной функцией AllocConsole. Дескрипторы консоли, устанавливаются в параметрах CreateFile как указано ниже.

Параметры

Значение

lpFileName

Используйте значение CONIN$, чтобы определить консольный ввод данных, а значение CONOUT$, чтобы определить консольный вывод данных.

CONIN$ получает дескриптор буфера консольного ввода данных, даже если функция SetStdHandleпереназначала дескриптор стандартного ввода данных. Чтобы получить дескриптор стандартного ввода данных, используйте функцию GetStdHandle.

CONOUT$ получает дескриптор активного экранного буфера, даже если функция  SetStdHandle переназначала дескриптор стандартного вывода данных. Чтобы получить дескриптор стандартного вывода данных, используйте функцию GetStdHandle.

dwDesiredAccess

Предпочитается сочетание флажков GENERIC_READ | GENERIC_WRITE , но либо один, либо другой может ограничить доступ.

dwShareMode

Когда открываете CONIN$, убедитесь, что определили доступ FILE_SHARE_READ. Когда открываете CONOUT$, убедитесь, что определили доступ FILE_SHARE_WRITE.

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

lpSecurityAttributes

Если Вы хотите чтобы была унаследована консоль, член bInheritHandle структуры SECURITY_ATTRIBUTESдолжен иметь значение ИСТИНА (TRUE).

dwCreationDisposition

При использовании функции CreateFile, чтобы открыть консоль, Вы должны установить флажок OPEN_EXISTING.

dwFlagsAndAttributes

Игнорируется.

hTemplateFile

Игнорируется.

Список ниже показывает воздействие  различных настроек параметров  dwDesiredAccess и lpFileName.

lpFileName

dwDesiredAccess

Результат воздействия

CON

GENERIC_READ

Открывает консоль для ввода данных.

CON

GENERIC_WRITE

Открывает консоль для вывода данных.

CON

GENERIC_READ GENERIC_WRITE

Windows 95/98/Me: Становится причиной завершения ошибкой работы функцииCreateFile; функция GetLastError возвращает код ошибки ERROR_PATH_NOT_FOUND.

Windows NT/2000/XP: Становится причиной завершения ошибкой работы функцииCreateFile; функция GetLastError возвращает код ошибки ERROR_FILE_NOT_FOUND.

 

Обменный почтовый ящик в ядре Windows

Если CreateFile открывает клиентский конец обменного почтового ящика (слота), функция возвращает значение INVALID_HANDLE_VALUE, если клиент почтового слота  пытается открыть локальный почтовый слот прежде, чем сервер почтового слота создаст его при помощи функции CreateMailSlot. Подробную информацию о почтовых ящиках в ядре Windows, см. Обменные почтовые ящики в ядреWindows.

Каналы

Если CreateFile открывает клиентский конец именованного канала, функция использует любой экземпляр именованного канала, который находится в  состоянии прослушивания. Процесс открытия может дублировать дескриптор столько раз, сколько этого требуется, но, как только откроется, этот экземпляр именованного канала не может открыться другим клиентом. Доступ определяется таким, чтобы  когда канал открывается, то должен быть совместим с доступом, заданным в параметре dwOpenMode  функции CreateNamedPipe. Подробную информацию о каналах, см. в главе Каналы.

Код примера