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


Обязательные обязанности DriverEntry

Обязательные, упорядоченные обязанности подпрограммы DriverEntry приведены следующим образом:

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

    Драйвер сохраняет точки входа для многих стандартных процедур в объекте драйвера или расширении драйвера. К таким точкам входа относятся рутина AddDevice драйвера, диспетчерские рутины, рутина StartIo и Unload рутина. Например, драйвер устанавливает точки входа для подпрограмм 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.)