Общие сведения о стандартных процедурах драйвера
Каждый драйвер в режиме ядра создается на основе набора системных стандартных процедур драйвера. Драйверы в режиме ядра обрабатывают пакеты запросов ввода-вывода (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", как показано на рисунке в разделе Введение в объекты драйвера. Соблюдение этого соглашения упрощает отладку и обслуживание драйверов.