Поделиться через


Общие сведения об объектах драйвера

Диспетчер ввода-вывода создает объект драйвера для каждого установленного и загруженного драйвера. Объекты драйвера определяются с помощью DRIVER_OBJECT структур.

Когда диспетчер ввода-вывода вызывает подпрограмму DriverEntry драйвера, он предоставляет адрес объекта драйвера водителя. Объект driver содержит хранилище для точек входа во многие стандартные процедуры драйвера. Драйвер отвечает за заполнение этих точек входа.

На следующем рисунке показан объект драйвера с набором системных стандартных процедур, которые могут или должны иметь драйверы низкого и более высокого уровня.

Каждая стандартная подпрограмма со звездочкой рядом со своим именем получает пакет запроса ввода-вывода (IRP) в качестве входных данных. Каждая из этих стандартных подпрограмм также получает указатель на объект целевого устройства для запроса ввода-вывода.

схема, иллюстрирующая объект драйвера.

Диспетчер ввода-вывода определяет тип объекта драйвера и использует его для регистрации и отслеживания сведений о загруженных образах драйверов. Обратите внимание, что точки входа диспетчеризации (DDDispatchXxxDDDispatchYyyy) в объекте драйвера соответствуют основным кодам функций (IRP_MJ_XXX), которые передаются в расположениях стека ввода-вывода irP.

Диспетчер операций ввода-вывода сначала направляет каждое IRP в подпрограмму диспетчеризации, предоставляемую драйвером. Подпрограмма диспетчеризации драйвера низкого уровня обычно вызывает подпрограмму поддержки ввода-вывода (IoStartPacket) для постановки в очередь (или передачи) каждого IRP с допустимыми аргументами в подпрограмму StartIo драйвера. Подпрограмма StartIo запускает запрошенную операцию ввода-вывода на определенном устройстве. Драйверы более высокого уровня обычно не имеют процедур StartIo , но они могут.