Привязка к событиям Windows

Функция TranslateASPI32Address

В операционных системах Windows все подключенные устройства (монитор, видеоадаптер, клавиатура, мышь и др.) распределены в виде иерархического дерева устройств, представленного в виде узлов DEVNODE. Это гораздо упрощает работу с устройствами и позволяет применить автоматический поиск новых устройств и их инициализацию в системе посредством технологии Plug and Play (PnP). Каждый раз при добавлении какого-либо нового устройства в систему или его удалении, происходит перераспределение соответствующего узла DEVNODE и далее вызывается специальное системное событие Windows изменения конфигурации установленного оборудования WM_DEVICECHANGE. При необходимости это событие можно обработать в своей программе. Функция TransiateASPI32Address в случае применения интерфейса ASPI позволяет связать любые изменения в узлах DEVNODE с распределением устройств. Поскольку такие изменения узлов DEVNODE вызывают сообщение Windows WM_DEVICECHANGE, то можно с помощью функции TransiateASPI32Address связать исходные адреса ASPI с технологией PnР И событием WM_DEVICECHANGE. Данная функция не может использоваться в системе Windows NT, поскольку в последней отсутствует поддержка РпР. Записать эту функцию можно следующим образом: BOOL TranslateASPI32Address(PDWORD pdwPath, PDWORD pdvDEVNODE);

Рассмотрим используемые в функции аргументы:

  • pdwPath

    Здесь надо указать путь для устройства, работающего с интерфейсом ASPI. Это значение состоит из трех составляющих: номера нужного контроллера (Hald), идентификационного номера нужного устройства (Target) и логического номера устройства на шине (Lun). Все три значения должны быть запакованы в тип DWORD. Например, значение 0X00HHTTLL содержит путь к устройству, где поле нн является номером контроллера, поле TT представляет номер устройства, a LL является ло¬гическим номером (адресом). Если значения TT и LL равны 0xFF, то будет указан путь к контроллеру, так как каждый контроллер имеет в системе собственный узел DEVNODE.

  • pdwDEVNODE

    Сюда помещается указатель на DWORD, содержащий идентификатор узла DEVNODE. Если это значение равно 0, то трансляция происходит от ин¬терфейса ASPI на узел DEVNODE. ЕСЛИ значение ненулевое, то происходит трансляция (передача) от узла DEVNODE на интерфейс ASPI.

В случае успешного выполнения, функция TransiateASPI32Address возвратит TRUE, а в случае ошибки — FALSE.

В следующем примере функция проверяет наличие сообщения WM_DEVICECHANGE и связывает его с адресатом интерфейса ASPI.

Листинг 5.1. Пример использования фнукции TransiateASPI32Address на Visual C++

He забудьте включить файл dbt.h в вашу программу. Кроме того, следует учесть, что в исходных текстах программ для Visual C++ системные файлы, т. е. встроенные в языковую оболочку, необходимо брать в угловые скобки (это нужно сделать и для dbt.h), а все остальные файлы заключают в двойные кавычки.

Аналогичный код, реализованный на языке Visual Basic, не приводится, так как он не является необходимым решением для этого языка программирования.

 

 

2021-04-01

Google сообщил о запуске проекта Dunant

Проект Dunant, начатый в 2018 году, был запущен в эксплуатацию. Трансатлантический интернет-кабель соединяет США и континентальную Европу. Общая протяженность...

подробнее
2020-04-06

Новшества в обновленной Windows 10

Корпорация Microsoft завершила разработку обновления, в котором добавлено множество функций. Обновление содержит как доработку уже имеющихся систем, так...

подробнее

 

Все новости...

 

Научно-Техническое Объединение

Тел.: +7(4752) 55-95-86

E-mail:e-mail