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


Предварительная регистрация MSI-X

Для поддержки изменения сопоставления прерываний для MSI-X или удаления ресурсов прерываний сообщений драйвер мини-порта должен установить функцию фильтра требований к ресурсам. Этот шаг предварительной регистрации выполняется до того, как NDIS вызовет функцию MiniportInitializeEx .

Чтобы установить функцию фильтра требований к ресурсам, драйвер мини-порта должен предоставить функцию MiniportSetOptions . Когда драйвер мини-порта вызывает функцию NdisMRegisterMiniportDriver из подпрограммы DriverEntry , драйвер передает точку входа для MiniportSetOptions в структуре NDIS_MINIPORT_DRIVER_CHARACTERISTICS . NDIS вызывает функцию MiniportSetOptions в контексте NdisMRegisterMiniportDriver.

Из MiniportSetOptions драйвер мини-порта вызывает функцию NdisSetOptionalHandlers и задает структуру NDIS_MINIPORT_PNP_CHARACTERISTICS . Эта структура определяет точки входа для функций MiniportAddDevice, MiniportRemoveDevice, MiniportStartDevice и MiniportFilterResourceRequirements .

Когда NDIS получает запрос на добавление устройства от диспетчера Plug and Play (PnP), NDIS вызывает функцию MiniportAddDevice драйвера мини-порта. Дескриптор, который NDIS передает MiniportAddDevice в параметре MiniportAdapterHandle , является дескриптором, который NDIS позже передает функции MiniportInitializeEx .

В MiniportAddDevice драйвер инициализирует структуру NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES и передает эту структуру функции NdisMSetMiniportAttributes . Структура NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES содержит элемент MiniportAddDeviceContext , который является дескриптором для области контекста, выделенной драйвером мини-порта для устройства. Позже NDIS предоставляет этот дескриптор контекста для функций MiniportRemoveDevice, MiniportFilterResourceRequirements, MiniportStartDevice и MiniportInitializeEx . Для MiniportInitializeEx дескриптор контекста передается в член MiniportAddDeviceContextструктуры NDIS_MINIPORT_INIT_PARAMETERS , на которую указывает параметр MiniportInitParameters .

После того как NDIS вызывает MiniportAddDevice и MiniportAddDevice возвращает NDIS_STATUS_SUCCESS, NDIS вызывает функцию MiniportFilterResourceRequirements каждый раз, когда получает пакет запроса IRP_MN_FILTER_RESOURCE_REQUIREMENTS ввода-вывода (IRP). MiniportFilterResourceRequirements может изменять сходство прерываний для каждого сообщения MSI-X, добавлять ресурсы прерываний сообщений или удалять ресурсы прерываний сообщений, если драйвер будет регистрировать прерывания на основе строк в функции MiniportInitializeEx . Дополнительные сведения о создании политики сходства прерываний см. в разделе Фильтрация ресурсов MSI-X.

Когда NDIS получает запрос на удаление устройства от диспетчера PnP, NDIS вызывает функцию MiniportRemoveDevice драйвера мини-порта. Функция MiniportRemoveDevice должна отменить операции, выполняемые функцией MiniportAddDevice .