Требуемые обязанности DriverEntry

Ниже приведены обязательные упорядоченные обязанности в рамках подпрограммы DriverEntry .

  1. Предоставьте точки входа для стандартных процедур драйвера.

    Драйвер хранит точки входа для многих стандартных подпрограмм в объекте драйвера или расширении драйвера. К таким точкам входа относятся те, которые относятся к подпрограмме AddDevice драйвера, подпрограммам диспетчеризации, подпрограммам StartIo и подпрограмме выгрузки . Например, драйвер задает точки входа для своих подпрограмм AddDevice, DispatchPnP и DispatchPower с помощью следующих инструкций (Xxx — это заполнитель для префикса, предоставленного поставщиком, идентифицируя драйвер):

        :
    DriverObject->DriverExtension->AddDevice = XxxAddDevice;
    DriverObject->MajorFunction[IRP_MJ_PNP] = XxxDispatchPnp;
    DriverObject->MajorFunction[IRP_MJ_POWER] = XxxDispatchPower;
        :
    

    Дополнительные стандартные подпрограммы, такие как ISR или Процедуры IoCompletion , задаются путем вызова подпрограмм поддержки системы. Дополнительные сведения см. в описании отдельных стандартных процедур драйвера.

  2. Создание и (или) инициализация различных объектов, типов или ресурсов драйвера, которые использует драйвер. Обратите внимание, что большинство стандартных подпрограмм используют объекты для каждого устройства, поэтому драйверы должны настраивать такие объекты в своих подпрограммах AddDevice или после получения запроса IRP_MN_START_DEVICE .

    Если драйвер имеет выделенный для устройства поток или ожидает каких-либо объектов диспетчера, определенных ядром, подпрограмма DriverEntry может инициализировать объекты диспетчера ядра. (В зависимости от того, как драйвер использует объекты, он может вместо этого выполнить эту задачу в своей процедуре AddDevice или после получения запроса IRP_MN_START_DEVICE .)

  3. Освободите выделенную память и больше не требуется.

  4. Возвращает значение NTSTATUS, указывающее, может ли драйвер успешно загрузиться и может ли он принимать и обрабатывать запросы от диспетчера PnP на настройку, добавление и запуск устройств. (См. раздел DriverEntry Return Values.)