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


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

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

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

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

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

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

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

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

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

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