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