Функция NdisIMInitializeDeviceInstanceEx (ndis.h)

Функция NdisIMInitializeDeviceInstanceEx инициирует операцию инициализации виртуального мини-порта и при необходимости настраивает сведения о состоянии виртуального мини-порта для последующих связанных драйверов протокола.

Синтаксис

NDIS_STATUS NdisIMInitializeDeviceInstanceEx(
  [in]           NDIS_HANDLE  DriverHandle,
  [in]           PNDIS_STRING DriverInstance,
  [in, optional] NDIS_HANDLE  DeviceContext
);

Параметры

[in] DriverHandle

Дескриптор драйвера мини-порта, которыйФункция NdisMRegisterMiniportDriver возвращает значение в NdisMiniportDriverHandle .

[in] DriverInstance

Указатель на тип NDIS_STRING, описывающий инициализированную инициализированную строку счетчика вызывающего объекта в системной кодировке по умолчанию. Строка содержит имя раздела реестра, в котором драйвер хранит сведения о виртуальном минипорте и, возможно, сведения о привязке. Для драйверов Microsoft Windows 2000 и более поздних версий эта строка содержит символы Юникода. То есть для Windows 2000 и более поздних версий NDIS определяет тип NDIS_STRING как тип UNICODE_STRING .

[in, optional] DeviceContext

Указатель на предоставленную вызывающим объектом память, которая должна быть настроена с определяемыми драйвером сведениями о контексте устройства о виртуальном минипорте, который по-прежнему может использоваться драйверами протокола более высокого уровня, которые впоследствии привязываются к этому виртуальному минипорту. Этот параметр может иметь значение NULL , если промежуточный драйвер не имеет такой области контекста устройства.

Возвращаемое значение

NdisIMInitializeDeviceInstanceEx может возвращать одно из следующих элементов:

Код возврата Описание
NDIS_STATUS_SUCCESS
NDIS инициировал операцию инициализации виртуального мини-порта промежуточного драйвера.
NDIS_STATUS_NOT_ACCEPTED
Сбой NdisIMInitializeDeviceInstanceEx , так как устройство, указанное в DriverHandle , уже инициализировано.

Комментарии

Промежуточный драйвер NDIS должен вызывать NdisIMInitializeDeviceInstanceEx из функции ProtocolBindAdapterEx . Сбой вызова NdisIMInitializeDeviceInstanceEx из промежуточного драйвера NDIS фактически предотвращает успешную загрузку этого драйвера.

Перед вызовом NdisIMInitializeDeviceInstanceEx функция ProtocolBindAdapterEx промежуточного драйвера должна быть привязана к любым базовым драйверам минипорта, необходимым для работы промежуточного драйвера. Функция ProtocolBindAdapterEx также может выделить область в DeviceContext , возможно, задав для нее промежуточные сведения о возможностях базового адаптера минипорта, собранные ProtocolBindAdapterEx. Функция MiniportInitializeEx промежуточного драйвера может впоследствии использовать эти сведения для настройки этой области контекста со сведениями о виртуальном минипорте драйвера.

Вызов промежуточного драйвера к NdisIMInitializeDeviceInstanceEx приводит к тому, что NDIS вызывает функцию MiniportInitializeEx промежуточного драйвера, если NDIS получает IRP_MN_START_DEVICE IRP для запуска устройства. Если NDIS не получает такой IRP, NDIS не будет вызывать функцию MiniportInitializeEx промежуточного драйвера.

Вызов MiniportInitializeEx может произойти позже и, следовательно, не обязательно находится в контексте вызова NdisIMInitializeDeviceInstanceEx. Если NDIS никогда не вызывает MiniportInitializeEx для виртуального мини-порта, на который ссылается вызов NdisIMInitializeDeviceInstanceEx , и промежуточный драйвер больше не требует виртуального мини-порта, промежуточный драйвер должен вызвать Функция NdisIMCancelInitializeDeviceInstance для отмены инициализации виртуального мини-порта. Например, предположим, что промежуточный драйвер создает виртуальный минипорт в ответ на успешную привязку к базовому адаптеру мини-порта. Если эта привязка удаляется до вызова NDIS MiniportInitializeEx, промежуточный драйвер должен вызвать NdisIMCancelInitializeDeviceInstance , чтобы отменить инициализацию виртуального мини-порта.

MiniportInitializeEx выделяет все ресурсы, необходимые драйверу для выполнения сетевых операций ввода-вывода, таких как вызов Функция NdisMSetMiniportAttributes и для инициализации виртуального минипорта драйвера в рабочее состояние. Затем драйверы протокола более высокого уровня могут привязаться к виртуальному минипорту после успешного завершения инициализации промежуточного драйвера.

После того как MiniportInitializeEx вернет управление, область контекста устройства промежуточного драйвера ( если она есть) может содержать любые данные, определяемые промежуточным драйвером, которые впоследствии позволяют всем драйверам протокола более высокого уровня, привязанным к тому же виртуальному минипорту, получать доступ к информации в этой области контекста. Такой драйвер протокола более высокого уровня может запрашивать контекст устройства, предоставленный промежуточным драйвером, с помощьюФункция NdisIMGetBindingContext.

Прежде чем NDIS вызывает функцию MiniportInitializeEx промежуточного драйвера, драйвер может вызвать NdisIMCancelInitializeDeviceInstance для отмены операции инициализации.

После того как NDIS вызывает функцию MiniportInitializeEx промежуточного драйвера, драйвер должен вызвать NdisIMDeInitializeDeviceInstance для отмены операции инициализации.

Требования

Требование Значение
Минимальная версия клиента Поддерживается для драйверов NDIS 6.0 и NDIS 5.1 (см. раздел NdisIMInitializeDeviceInstanceEx (NDIS 5.1)) в Windows Vista. Поддерживается для драйверов NDIS 5.1 (см. раздел NdisIMInitializeDeviceInstanceEx (NDIS 5.1)) в Windows XP.
Целевая платформа Персональный компьютер
Верхняя часть ndis.h (включая Ndis.h)
Библиотека Ndis.lib
IRQL PASSIVE_LEVEL
Правила соответствия DDI Irql_IM_Function(ndis)

См. также раздел

IRP_MN_START_DEVICE

MiniportInitializeEx

NdisAllocateMemoryWithTagPriority NdisCancelInitializeDeviceInstance NdisIMDeInitializeDeviceInstance

NdisIMGetBindingContext

NdisIMInitializeDeviceInstanceEx

NdisInitializeString

NdisMRegisterMiniportDriver

NdisMSetMiniportAttributes

NdisOpenAdapterEx

ProtocolBindAdapterEx

UNICODE_STRING