Компьютерные книги
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Аппаратное обеспечение -> Агуров П.В. -> "Интерфейсы USB. Практика использования и программирования" -> 72

Интерфейсы USB. Практика использования и программирования - Агуров П.В.

Агуров П.В. Интерфейсы USB. Практика использования и программирования — БВХ-Петербург, 2004. — 576 c.
ISBN 5-94157-202-6
Скачать (прямая ссылка): interfeysusbpraktikaispolzovaniya2004.djvu
Предыдущая << 1 .. 66 67 68 69 70 71 < 72 > 73 74 75 76 77 78 .. 168 >> Следующая

Гпава 9. Введение в WDM
¦209
null. После этого пакет IRP поступает в вызываемую рабочую процедуру
драйвера;
? при использовании метода method_neither диспетчер в/в помещает адрес
входного буфера инициатора запроса в поле
Parameters.DeviceloControl.Type3InputBuffег В текущей ячейке стека пакета
IRP текущей операции в/в. В поле userBuffer производится запись адреса
выходного буфера инициатора запроса, где инициатор ожидает получить
результаты выполнения операции. Оба этих адреса указывают в область
памяти инициатора запроса.
9.4. Загрузка драйвера и обращение к процедурам драйвера
Теперь, когда мы выяснили, что основная деятельность драйвера
производится в рабочих процедурах, разберемся с вопросом, как получить
доступ к этим процедурам (при описании мы несколько упростим картину,
позволив себе подойти к этому вопросу с практической точки зрения).
9.4.1. Процедура работы с драйвером
Процедура работы с драйвером выглядит следующим образом:
? загрузка драйвера с помощью вызова CreateFile (вызывает также рабочую
процедуру irp_mj_create);
? вызов либо стандартных рабочих процедур (например, процедуры
irp__mj_read с помощью функции ReadFile, см. табл. 9.1), либо
пользовательских процедур, описанных в рабочей процедуре irp mj
device_control С ПОМОЩЬЮ вызова DeviceloControl (СМ. разд. 9,3.5);
? закрытие драйвера с. помощью вызова cioseHandie.
Описание и параметры использованных функций представлены в справочной
части книги, в главе 16.
Загрузка драйвера производится по имени драйвера или устройства,
например, как показано в листинге 9.19.
Листинг 9.19. Загрузка драйвера по имени драйвера или по имени устройства
// Загрузка по имени устройства hCamHandle:= CreateFile(
'\\.\COMl' // передаем имя отафываемого порта
GENERIC_READ or GENERICJWRITE, // ресурс для чтения и записи
О, // нераэделяеьялй ресурс
210
Часть III. Практика программирования
nil, // Нет атрибутов защиты
OPEN_EXISTING, // вернуть ошибку, если ресурс не существует
FILE_FLAG_OVERLAPPED, // асинхронный режим доступа О // Должно быть 0 для
СОМ-портов );
// Загрузка по имени драйвера hDevice: *= CreateFiie('\\.\giveioex',
GENERIC_READ or GENERIC_WRITE,
0, nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0
);
В качестве имени устройства указывается одно из символьных имен
физического устройства (см. разд. 9.2). Например, comi, хотя и кажется
именем устройства, на самом деле является символьным именем устройства
\Device\seriaio. Для того чтобы драйвер был загружен, системе нужно знать
физическое расположение файла драйвера. Для этого в специальной ветке
реестра содержится запись о драйвере.
9.4.2. Регистрация драйвера
Для того чтобы драйвер мог быть обнаружен системой (т. е. по имени
драйвера был найден и загружен физический файл), он долЗкен быть
зарегистрирован в специальной ветке реестра.
Регистрация драйвера может производиться с помощью INF-файла (см. разд.
10.4), с помощью специальных утилит или программно, с помощью специальной
компоненты Windows, называемой SCM-менеджер (Service Control Manager,
менеджер управления сервисами).
Регистрация с помощью SCM-менеджера
Преимущество использования SCM-менеджера состоит в том, что его функции
позволяют динамически загружать и выгружать драйверы непосредственно из
пользовательских программ, не прибегая к использованию Мастера установки
оборудования. Таким образом, приложение само может определять время
присутствия драйвера в операционной системе. Однако отметим, что не все
драйверы могут быть загружены и запущены средствами SCM-менеджера.
Гпава 9. Введение в WDM
211
Листинг 9.20 показывает регистрацию драйвера с помощью SCM-менеджера,
состоящую из следующих действий:
? регистрация сервиса:
• открытие SCM-менеджера с помощью вызова функции
орепвсм
Manager С флагом SC_MANAGER_ALL_ACCESS;
• регистрация драйвера как SCM-сервиса с помощью вызова функции
CreateService;
• закрытие дескриптора сервиса с помощью вызова функции ciose_
Ser-viceHandleJ
• закрытие дескриптора менеджера с помощью вызова функции ciose_
ServiceHandleJ
? старт сервиса:
• открытие SCM-менеджера с помощью вызова функции
орепвсм_
Manager с флагом sc_manager_connect;
• открытие сервиса, соответствующего драйверу, с помощью функции
openService с флагом service_start;
• старт сервиса с помощью функции startservice;
• закрытие дескриптора сервиса;
• закрытие дескриптора SCM-менеджера.
Процедура останова и разрегистрации драйвера, показанная в листинге 9.21,
является "симметричной" копией процедуры старта:
? останов сервиса:
• открытие SCM-менеджера с помощью вызова функции
openSCM_
Manager С флагом SC_MANAGER_CONNECT;
• открытие сервиса, соответствующего драйверу, с помощью функции
OpenService С флагом SERVICE_STOP;
• останов сервиса с помощью функции Controiservice с флагом
SERVICE_CONTROL_STOP;
• закрытие дескриптора сервиса;
• закрытие дескриптора SCM-менеджера;
? разрегистрация сервиса:
• открытие SCM-менеджера с помощью вызова функции
Предыдущая << 1 .. 66 67 68 69 70 71 < 72 > 73 74 75 76 77 78 .. 168 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Завалишин Д. "Интернетско-русский разговорник" (Web-программирование)

Заенцев И.В. "Нейронные сети: основные модели" (Web-программирование)

Владимиров А.А. "Wi-фу: «боевые» приемы взлома и защиты беспроводных сетей" (Web-программирование)

Вьейра Р. "SQL Server 2000. Программирование в 2 ч." (Web-программирование)

Веллинг Л.Т. "Разработка web приложений с помощью php и mysql" (Web-программирование)
Авторские права © 2013 ComputersBooks. Все права защищены.

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed