Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
uchebnik.docx
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
557.61 Кб
Скачать

1.2.4.4 Функции управления некоторыми устройствами

Для оповещения приложений об изменении в аппаратной конфигурации вычислительной системы или в параметрах энергообеспечения, ОС использует сообщения.

Сообщения устройств являются системными сообщениями, которые уведомляют приложения и другие компоненты об изменениях в составе аппаратного обеспечения вычислительной системы (подключен или отключен съемный диск и т.п.).

С целью удостовериться, что приложение не потеряет данные из-за исчезновения какого-либо устройства, ОС отслеживает конфигурацию аппаратного обеспечения ЭВМ и посылает сообщения о предстоящих изменениях в составе устройств приложениям с тем, чтобы те могли подготовиться к изменениям до того, как они наступят.

Для каждого события устройства, ОС посылает сообщение WM_DEVICECHANGE всем приложениям. В этом сообщении параметр wParam идентифицирует тип события устройства, а параметр lParamявляется указателем на специфические для данного события данные.

Функция DeviceIoControl обеспечивает интерфейс ввода/вывода, с помощью которого приложения могут напрямую связываться с драйвером устройства. Функция DeviceIoControl является интерфейсом широкого пользования, который может посылать управляющие коды в различные устройства. Каждый управляющий код определяет операцию, которую должен выполнить драйвер. Некоторые стандартные управляющие коды определены в заголовочных файлах SDK (WinIOCtl.h). Дополнительные управляющие коды могут быть определены в драйверах в зависимости от специфики устройства.

В таблице 22 приведены некоторые стандартные коды функций, входящих в управляющие коды из SDK.

Таблица 22 - Стандартные управляющие коды

Код

Назначение

IOCTL_CHANGER_GET_PARAMETERS

0x0000

Получить параметры указанного устройства.

IOCTL_CHANGER_GET_STATUS

0x0001

Получить текущее состояние указанного устройства

IOCTL_CHANGER_GET_PRODUCT_DATA

0x0002

Получить данные о устройстве (идентификатор производителя, устройства, серийный номер и т.п.)

IOCTL_STORAGE_GET_MEDIA_TYPES

Получить архитектуру указанного устройства (количество цилиндров, тип диска, количество дорожек на цилиндр, количество секторов на дорожке и количество байт на секторе).

Тип управляющих кодов, которые разработчик может определить по своему усмотрению, зависит от устройства, которым предполагается управлять и от платформы, на которой будет запускаться разрабатываемое приложение. Приложения могут использовать или стандартные управляющие коды или специфичные для конкретного устройства коды для выполнения операций прямого ввода/вывода на жесткий диск, компакт-диск и т.п.

В таблице 23 перечислены некоторые функции, используемые для управления устройствами.

Таблица 23 - Функции для управления устройствами

Функция

Описание

DeviceIoControl

Посылает управляющий код напрямую драйверу определенного устройства. В качестве входных параметров используется:

  • Дескриптор устройства (создается при открытии или создании файлового объекта типа "устройство");

  • Управляющий код, идентифицирующий операцию с устройством;

  • Указатель на входной буфер данных, которые необходимы для выполнения операции (этот параметр может быть равен 0, если операция не предполагает использование каких-либо входных данных);

  • Размер входного буфера данных в байтах;

  • Указатель на выходной буфер данных, которые необходимы для выполнения операции (этот параметр может быть равен 0, если операция не предполагает использование каких-либо выходных данных);

  • Размер выходного буфера данных в байтах;

  • Указатель на переменную, содержащую реальное число байт, записанных в выходной буфер.

InstallNewDevice

Устанавливает новое устройство. Посылается запрос пользователю для выбора устройства. В качестве входных параметров используется:

  • Дескриптор окна, в котором будет осуществляться выбор устройства;

  • Указатель на класс устройства (этот параметр может быть равен 0, в этом случае пользователь начинает выбор устройства со страницы выбора обнаруженных устройств);

  • Указатель на переменную, определяющую необходимость перезагрузки вычислительной машины, после добавления нового устройства.

RegisterDeviceNotification

Регистрирует устройство или тип устройств, для которых окно будет получать уведомления. В качестве входных параметров используется:

  • Дескриптор окна или службы (сервиса), которое будет получать уведомления о событиях, происходящих с устройством;

  • Указатель на блок данных, определяющих тип устройств, события с которыми будут инициировать уведомления;

  • Флаги, определяющие кому предназначено уведомление: окну или службе.

Возвращаемое значение является дескриптором окна или службы.

UnregisterDeviceNotification

Закрывает все дескрипторы указанного устройства. В качестве входного параметра задается дескриптор окна или службы, получавшего уведомления от устройства.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]