Требуемые обязанности DriverEntry
Ниже приведены обязательные упорядоченные обязанности в рамках подпрограммы DriverEntry .
Предоставьте точки входа для стандартных процедур драйвера.
Драйвер хранит точки входа для многих стандартных подпрограмм в объекте драйвера или расширении драйвера. К таким точкам входа относятся те, которые относятся к подпрограмме AddDevice драйвера, подпрограммам диспетчеризации, подпрограммам StartIo и подпрограмме выгрузки . Например, драйвер задает точки входа для своих подпрограмм AddDevice, DispatchPnP и DispatchPower с помощью следующих инструкций (Xxx — это заполнитель для префикса, предоставленного поставщиком, идентифицируя драйвер):
: DriverObject->DriverExtension->AddDevice = XxxAddDevice; DriverObject->MajorFunction[IRP_MJ_PNP] = XxxDispatchPnp; DriverObject->MajorFunction[IRP_MJ_POWER] = XxxDispatchPower; :
Дополнительные стандартные подпрограммы, такие как ISR или Процедуры IoCompletion , задаются путем вызова подпрограмм поддержки системы. Дополнительные сведения см. в описании отдельных стандартных процедур драйвера.
Создание и (или) инициализация различных объектов, типов или ресурсов драйвера, которые использует драйвер. Обратите внимание, что большинство стандартных подпрограмм используют объекты для каждого устройства, поэтому драйверы должны настраивать такие объекты в своих подпрограммах AddDevice или после получения запроса IRP_MN_START_DEVICE .
Если драйвер имеет выделенный для устройства поток или ожидает каких-либо объектов диспетчера, определенных ядром, подпрограмма DriverEntry может инициализировать объекты диспетчера ядра. (В зависимости от того, как драйвер использует объекты, он может вместо этого выполнить эту задачу в своей процедуре AddDevice или после получения запроса IRP_MN_START_DEVICE .)
Освободите выделенную память и больше не требуется.
Возвращает значение NTSTATUS, указывающее, может ли драйвер успешно загрузиться и может ли он принимать и обрабатывать запросы от диспетчера PnP на настройку, добавление и запуск устройств. (См. раздел DriverEntry Return Values.)