Общие сведения о стандартных процедурах драйвера

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

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

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

В следующей таблице перечислены необходимые стандартные подпрограммы.

Обязательные стандартные подпрограммы драйвера Назначение Где описано
DriverEntry Инициализирует драйвер и его объект драйвера. Написание процедуры DriverEntry
AddDevice Инициализирует устройства и создает объекты устройств. Написание процедуры AddDevice
Подпрограммы диспетчеризации Получение и обработка IRP. Написание процедур диспетчеризации
Выгрузить Освобождение системных ресурсов, полученных драйвером. Написание подпрограммы выгрузки

В следующей таблице перечислены несколько необязательных процедур.

Необязательные стандартные процедуры драйвера Назначение Где описано
Повторная инициализация Завершает инициализацию драйвера, если driverEntry не удается. Написание подпрограммы повторной инициализации
StartIo Запускает операцию ввода-вывода на физическом устройстве. Написание процедуры StartIo
Подпрограмма службы прерываний Сохраняет состояние устройства при прерывании. Написание ISR
Отложенные вызовы процедур Завершает обработку прерывания устройства после того, как ISR сохранит состояние устройства. Объекты DPC и DPC
SynchCritSection Синхронизирует доступ к данным драйвера. Использование критических разделов
AdapterControl Инициирует операции DMA. Объекты адаптера и DMA
IoCompletion Завершает обработку IRP драйвером. Завершение IRP
Отмена Отменяет обработку IRP драйвером. Отмена IRP
CustomTimerDpc, IoTimer Синхронизация и синхронизация событий. Методы синхронизации

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

По соглашению системные драйверы доставляются перед идентифицируемым, зависящим от драйвера или конкретного устройства префиксом к имени каждой стандартной процедуры, кроме DriverEntry. В качестве примера в этой документации используется "DD", как показано на рисунке в разделе Введение в объекты драйвера. Соблюдение этого соглашения упрощает отладку и обслуживание драйверов.