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

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

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

tdefine IRP_MJ_QUERY_EA 0x07
tdefine IRP_MJ_SET_EA 0x08
tdefine IRP_MJ_FLUSH_BUFFERS 0x09
tdefine IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a tdefine
IRP_MJ_SET_VOLUME_INFORMATION 0x0b tdefine IRP_MJ_DIRECTORY_CONTROL 0x0c
tdefine IRP_MJ_FILE_SYSTEM_CONTROL OxOd
tdefine IRP_MJ_DEVICE_CONTROL OxOe
tdefine IRP_MJ_INTERNAL_DEVICE_CONTROL OxOf tdefine IRP_MJ_SHUTDOWN 0x10
tdefine IRP_MJ_LOCK_CONTROL 0x11
tdefine IRP_MJ_CLEANUP 0x12
tdefine IRP_MJ_CREATE_MAILSLOT 0x13
tdefine IRP_MJ_QUERY_SECURITY 0x14
tdefine IRP_MJ_SET_SECURITY 0x15
tdefine IRP_MJ_POWER 0x16
tdefine IRP_MJ_SYSTEM_CONTROL 0x17
tdefine IRP_MJ_DEVICE_CHANGE 0x18
tdefine IRP_MJ_QUERY_QUOTA 0x19
tdefine IRP_MJ_SET_QUOTA Oxla
tdefine IRP_MJ_PNP Oxlb
tdefine IRP_MJ_PNP_POWER IRP_MJ_PNP
tdefine IRP MJ MAXIMUM FUNCTION Oxlb
Если драйверу интересен только один тип запросов, то можно
воспользоваться константой irp_mj_maximum_function, как показано в
листинге 9.5. Все запросы будут обрабатываться процедурой irpHandler, за
исключением запросов irp_mj_device_control, которые будут поступать в
процедуру
IrpDeviceControl.
\92
Часть III. Практика программирования
Листинг 9.5. Об
Р.ЭДНОГО типа запроса,
.nt i;
¦or (i=0; i < IRP_MJ_MAXIMUM_FUNCTION; i++)
DriverObject->MajorFunction[i] = IrpHandler;
iriverObject->MajorFunctiontIRP M J_ DEVICE _CONTROL] = IrpDeviceControl;
Основной обязанностью процедуры AddDevice (точнее юворя, той процеду-)Ы,
которая была зарегистрирована В поле Driv<?rExtension->Addnevjce 1ри
вызове DriverEntry) является создание объекта устройства с исиользо-шнием
вызова XoCreateDevice.
Заголовок процедуры AddDevice показан в листинге 9.6, а скелетный пример
трганизации самой рабочей процедуры - в листинге 9.7.
1ри необходимости подключения к объекту физического устройства (этот
тбьект создается шинным драйвером) драйвер может вызвать функцию : о A11
а с h D е v i с е, . передав ей указатель, взятый из параметра
IhysicalDeviceObject.
Листинг 9.6. Заголовок процедуры AddDevice
JT STATUS XxxAddDevi.ce (
IN PDR'L VER_OBJECT Dr i verOb ject,
IN PDEVICE_OBJECT PhysicslDeviceObject
Листинг 9.7. Пример процедуры AddDevice
Э.3.2. Процедура AddDevice
ITS TAT 03 E'i Iter AddDevice (
IN PDRIVER_OBJECT DriverObject,
IN PDEVICE_OBJECT Phys ica1Devi ceObj ect
NTSTATUS
status = STATUS SUCCESS; deviceObject = NULL; deviceExtension;
deviceType = EILE_DEVlCE_UNKNOWN;
PDEVICE OBJECT
PDEVICE EXTENSION
ULONG
Гпава 9. Введение в WDM
193
// Вызов LoIsWdmVersionAvailable(1, 0x20) возвращает TRUE //в
операционных системах после Windows 2000. if (!loIsWdmVersionAvailable(1,
0x20)) (
deviceObject = IoGetAttachedDeviceReference(PhysicalDeviceObject);
deviceType = deviceObj ec.t->DeviceType;
ObDereferenceObject(deviceObject);
}
// Создание объекта драйвера-фильтра status = IoCreateDevice
(DriverObject, sizeof (DEVICE_EXTENSION),
NULL, // без имени deviceType,
FILE_DEVICE_SECURE_OPEN,
FALSE,
sdeviceObj ect ) ;
if (!NT_SUCCESS (status)) {
// выход, если ошибка return status;
}
// отладочная информация
DebugPrint (("AddDevice PDO (0x%x) FDO (0x%x)\n", PhysicalDeviceObject,
deviceObject));
deviceExtension = (PDEVICE_EXTENSION) deviceObject->DeviceExtension;
deviceExtension->NextLowerDriver =
loAttachDeviceToDeviceStack(deviceObject, PhysicalDeviceObject);
// Ошибка означает сбой в системе Plug and Play if(NULL ==
deviceExtension->NextLowerDriver) {
IoDeieteDevice(deviceObject); return STATUS_UNSUCCESSFUL;
}
deviceObject->Flags |= deviceExtension->NextLowerDriver->Flags &
(DO^BUFFERED IO I DO_DIRECT 10 I
'94
Часть III. Практика программирования
DO_POWER_PAGABLE
) ;
deviceObject->DeviceType =
deviceExtension->NextLowerDriver->DeviceType; deviceObject-
>Characteristics =
deviceExtension->NextLowerDriver->Characteristics; deviceExtension->Self
= deviceObject;
// Установка начального состояния фильтра
INITIALIZE_PNP_STATE(deviceExtension);
DebugPrint(("AddDevice: %x to %x->%x \n", deviceObject,
deviceExtension->NextLowerDriver, PhysicalDeviceObject));
deviceObject->Flags &= ~DO_DEVICE_INITIALIZING; return STATUS SUCCESS;
).3.3. Процедура Unload
)бычно загруженный драйвер остается в системе до перезафузки. Для того
[тобы сделать драйвер выфужаемым, необходимо написать и зарегистриро-|ать
процедуру выфузки unload. Диспетчер в/в произведет вызов этой про-(едуры
в момент ручной либо автоматической вьпрузки драйвера.
•аголовок этой процедуры показан в листинге 9.8.
Листинг 9.8. Заголовок процедуры unload
VOID GiveioUnload(
IN PDRIVER_OBJECT pDriverObject // указатель на объект драйвера
Процедура unload выполняет стандартный набор действий:
При необходимости драйвер может сохранять текущие настройки в системном
реестре. При последующей загрузке драйвера эти данные могут быть
использованы В процедуре DriverEntry.
Гпава 9. Введение в WDM
195
2. Если разрешены прерывания для обслуживаемого устройства, то процедура
unload должна произвести их запрещение и отключение от объекта
Предыдущая << 1 .. 61 62 63 64 65 66 < 67 > 68 69 70 71 72 73 .. 168 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

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

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

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

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