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

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

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

имя_драйвера;
? start (тип reg_dword) - значение этого параметра описывает стадию
загрузки операционной системы, когда следует загружать драйвер. Возможные
варианты приведены в табл. 9.4;
216
Часть ill. Практика программирования
? туре (тип reg_dword) - значение этого параметра описывает тип драйвера.
Некоторые значения этого параметра приведены в табл. 9.5;
? параметры подраздела Enum - подраздел Enum в ветке описания драйвера
присутствует постоянно для драйверов, загруженных с помощью Мастера
установки оборудования. Для драйверов, загружаемых при помощи SCM-
сервиса, он появляется только после их удачного старта. В этом разделе
присутствуют параметры Count (число обнаруженных устройств), Nextlnstance
и параметры 1, 2 и т. д. Параметры 1, 2 и т. д. появляются только для
удачно стартовавших драйверов, а их значения указывают на ветку
HKLM\System\CurrentControlSet\Enum (где отражаются все когда-либо удачно
стартовавшие драйверы).
Таблица 9.3. Значения параметра EiroiContiol
Значение Символьное имя Описание
0x00 SERVICE_ERROR_IGNORE Ошибки игнорируются, загрузка продолжается
без уведомлений об ошибках в данном драйвере
0x01 SERVICE_ERROR_NORMAL Ошибки игнорируются, но сообщения об ошибках
выводятся, при этом загрузка продолжается
0x02 SERVICE_ERROR_SEVERE Порядок загрузки нарушается и начинается
заново с использованием набора параметров последней успешной загрузки, а
если он уже используется, то ошибка игнорируется
0x03 SERVICE_ERROR_CRITICAL Порядок загрузки нарушается и начинается
заново с использованием набора ¦ параметров последней успешной загрузки,
а если он уже используется, то загрузка прерывается и выводится сообщение
об ошибке
Таблица 9.4. Значения параметра start
Значение Символьное имя Описание
0x00 SERVICE_BOOT_START Драйвер запускается загрузчиком ОС
0x01 SERVICE_SYSTEM_START Драйвер запускается на стадии загрузки
компонентов ядра ОС
0x02 SERVICE_AUTO_START Драйвер будет запущен средствами SCM-
менеджера после загрузки компонентов ядра ОС
Гпава 9. Введение в WDM
217
Таблица 9.4 (окончание)
Значение Символьное имя Описание
0x03 SERVICE_DEMAND_START Драйвер запущен пользовательским приложением
при помощи средств SCM-менеджера
0x04 SERVICE_DISABLED Драйвер не может быть запущен
Таблица 9.5. Значения параметра Type
Значение Символьное имя Описание
0x01 SERVICE_KERNEL_DRIVER Драйвер режима ядра
0x02 SERVICE_FILE_SYSTEM_DRIVER Драйвер файловой системы
0x04 SERViCE_ADAP1TER Драйвер адаптера
9.4.3. Обращение к рабочим процедурам
Обращение к стандартным рабочим процедурам производится с помощью
стандартных функций Windows API, а к пользовательским - с помощью вызова
функции DeviceloControl.
Соответствие рабочих процедур и функций Windows API приведено в табл.
9.1. Например, вызов рабочей процедуры с кодом irp_mj_read производится с
помощью вызова функции ReadFile.
Вызов функции DeviceloControl позволяет обращаться к рабочей процедуре
irp_mj_device_control. Различение пользовательских процедур производится
с помощью подкода (sub code), передаваемого при вызове DeviceloControl
(см. разд. 9.2.5).
Листинг 9.22 демонстрирует вызов пользовательской рабочей процедуры с
кодом $900.
Листинг 9.22. Загрузка и обращение к рабочим процедурам драйвера
Procedure TGivelOEx.GiveloForProcess(dwProcessId : Cardinal);
var hDevice : SC_HANDLE; Result ; Cardinal;
begin
// Загрузить драйвер с именем giveioex hDevice:=
CreateFiie('\\.\giveioex',
GENERIC_READ or GENERIC_WRITE,
218
Часть III. Практика программирования
О,nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
О
);
// Обращение к рабочей процедуре с кодам IRP_MJ_DEVICE_CONTROL // и
подходом $900
DeviceloControl(hDevice, Get_Ctl_Code($900),
0dwProcessId, SizeOf(dwProcessId), nil, 0, Result, nil);
// Закрытие драйвера CioseHandle(hDevice); end;
9.4.4. Хранение драйвера внутри исполняемого файла
В заключение раздела сделаем небольшое замечание. В приведенном ранее
случае для работы программы требуется два файла - файл программы и файл
драйвера. Для удобства установки и распространения программы можно
использовать специальный ресурсный файл, позволяющий "встроить" файл
драйвера в файл программы, и распространять один файл вместо двух. Для
этого нужно в любом редакторе ресурсов создать бинарный ресурс, загрузив
его из файла драйвера. Полученный файл ресурса (он имеет расширение res)
с помощью директивы {$r имя_файла.гез} включают в модуль программы,
содержащий обращение к драйверу, а затем выполняют следующие шаги
(листинг 9.23):
1. Создать файл драйвера.
2. Записать в созданный файл содержимое ресурса.
3. Работать, как обычно, с созданным файлом драйвера.
4. Удалить файл драйвера.
Таким образом, динамическое создание и уничтожение файла драйвера будет
производиться прозрачно для программы.
Листинг 9.23. Динамическое создание файла драйвера
// Подключение файла ресурсов {$R GiveloEx.RES}
// получение пути к системному каталогу' fimction GetSystemDir : String;
Предыдущая << 1 .. 68 69 70 71 72 73 < 74 > 75 76 77 78 79 80 .. 168 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.