Организация ввода-вывода. Драйверы WDM. Рощин А.В. - 33 стр.

UptoLike

Составители: 

33
Следует иметь в виду, что при завершении функции DriverEntry с ошибкой,
система не вызывает функцию DriverUnload. Поэтому, если функция DriverEntry
успела что-то натворить до выхода с ошибкой, она должна сама все исправить.
2.5 Функция AddDevice
Если драйвер обслуживает более одного физического устройства, он должен
включать в себя специальную функцию AddDevice
. Диспетчер PnP вызывает ее
для каждого дополнительного устройства.
Функция выглядит примерно так:
NTSTATUS AddDevice(PDRIVER_OBJECT DriverObject,
PDEVICE_OBJECT pdo)
{
Return STATUS_SOMETHING; //Например, STATUS_SUCCESS
}
Аргумент DriverObject указывает на объект драйвера, инициализированный
функцией DriverEntry. Аргумент pdo содержит адрес объекта физического
устройства в нижней части стека.
Основные действия, выполняемые функцией AddDevice:
Вызов IoCreateDevice для создания объекта устройства и экземпляра
объекта расширения устройства.
Регистрация одного или нескольких интерфейсов устройства для связи с
приложениями. Другой способ связи
с приложениямиприсвоение
имени объекту и создание символической ссылки.
Инициализация объекта расширения устройства и поля Flags объекта
устройства.
Вызов функции IoAttachDeviceToDeviceStack для включения нового
объекта в стек.
2.6 Создание объекта устройства
Для создания объекта устройства вызывается функция IoCreateDevice.
Пример такого вызова приведен ниже:
     Следует иметь в виду, что при завершении функции DriverEntry с ошибкой,
система не вызывает функцию DriverUnload. Поэтому, если функция DriverEntry
успела что-то натворить до выхода с ошибкой, она должна сама все исправить.


     2.5 Функция AddDevice
     Если драйвер обслуживает более одного физического устройства, он должен
включать в себя специальную функцию AddDevice. Диспетчер PnP вызывает ее
для каждого дополнительного устройства.
     Функция выглядит примерно так:
     NTSTATUS AddDevice(PDRIVER_OBJECT DriverObject,
         PDEVICE_OBJECT pdo)
     {


     Return STATUS_SOMETHING; //Например, STATUS_SUCCESS
     }
     Аргумент DriverObject указывает на объект драйвера, инициализированный
функцией DriverEntry. Аргумент pdo содержит адрес объекта физического
устройства в нижней части стека.
     Основные действия, выполняемые функцией AddDevice:
     − Вызов IoCreateDevice для создания объекта устройства и экземпляра
         объекта расширения устройства.
     − Регистрация одного или нескольких интерфейсов устройства для связи с
         приложениями. Другой способ связи с приложениями – присвоение
         имени объекту и создание символической ссылки.
     − Инициализация объекта расширения устройства и поля Flags объекта
         устройства.
     − Вызов функции IoAttachDeviceToDeviceStack для включения нового
         объекта в стек.
     2.6 Создание объекта устройства
     Для создания объекта устройства вызывается функция IoCreateDevice.
Пример такого вызова приведен ниже:

                                      33