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


Инициализация минипорт-адаптера

Когда сетевое устройство становится доступным, система загружает необходимый мини-драйвер NDIS, если он еще не загружен. Впоследствии менеджер Plug and Play (PnP) отправляет NDIS запрос на ввод-вывод Plug and Play (IRP) для запуска устройства. NDIS вызывает функцию "MiniportInitializeEx" у минипорт-драйвера для инициализации адаптера для сетевых операций ввода-вывода. NDIS может вызывать MiniportInitializeEx в любое время после инициализации драйвера. Дополнительные сведения о инициализации драйвера минипорта см. в разделе Инициализация минипорта драйвера.

Пока MiniportInitializeEx возвращается, NDIS не отправляет никаких запросов на инициализацию адаптера. Адаптер находится в состоянии инициализации.

Минипорт-драйвер обычно выполняет следующие задачи в MiniportInitializeEx:

  1. Получает сведения о конфигурации адаптера.

  2. Получает сведения о аппаратных ресурсах адаптера.

  3. Вызывает NdisMSetMiniportAttributes и предоставляет следующие атрибуты, связанные с адаптером:

    • Указатель на область контекста, выделенную драйвером.
    • Флаги соответствующих атрибутов.
    • Интервал времени ожидания для вызова функции MiniportCheckForHangEx.
    • Тип интерфейса.
  4. Инициализирует ресурсы, относящиеся к адаптеру.

Драйвер минипорта указывает атрибуты адаптера в структуре NDIS_MINIPORT_ADAPTER_ATTRIBUTES, которая MiniportInitializeEx передается в NdisMSetMiniportAttributes.

Как правило, MiniportInitializeEx выделяет ресурсы, относящиеся к адаптеру, в следующем порядке:

  1. Непагированная память пула.

  2. NET_BUFFER и пулы NET_BUFFER_LIST (см. операции отправки и получения драйвера Miniport).

  3. Спин-блокировки.

  4. Таймеры.

  5. Порты ввода-вывода.

  6. DMA (см. точечная и сборнаяDMA).

  7. Общая память.

  8. Прерывания (см. управление прерываниями).

После успешного возврата MiniportInitializeEx адаптер находится в состоянии "Приостановлено". NDIS может вызывать функцию MiniportRestart для перехода адаптера в состояние "Рабочее". Дополнительные сведения см. в разделе Запуск минипорт адаптера.

Если MiniportInitializeEx возвращает NDIS_STATUS_SUCCESS, драйвер должен освободить все ресурсы адаптера в функции MiniportHaltEx. Дополнительные сведения см. в разделе Остановка адаптера минипорта.

Драйвер должен вызвать NdisMSetMiniportAttributes и установить GeneralAttributes в структуре NDIS_MINIPORT_ADAPTER_ATTRIBUTES, если он возвращает NDIS_STATUS_SUCCESS.

Если MiniportInitializeEx произошел сбой, MiniportInitializeEx должен освободить все ресурсы, выделенные перед возвратом, и адаптер возвращается в состояние "Остановленный".

остановка минипорт-адаптера

Состояния минипорт-адаптера и операции минипорта

Операции отправки и получения драйвера минипорт

разбрасывание/сбор DMA

запуск минипорт-адаптера