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

NdisMRegisterIoPortRange настраивает доступ драйвера к портам ввода-вывода устройства с помощью функций NdisRawReadPortXxx и NdisRawWritePortXxx и утверждает диапазон адресов портов ввода-вывода в реестре для сетевой карты этого драйвера.

Синтаксис

NDIS_STATUS NdisMRegisterIoPortRange(
  [out] PVOID       *PortOffset,
  [in]  NDIS_HANDLE MiniportAdapterHandle,
  [in]  UINT        InitialPort,
  [in]  UINT        NumberOfPorts
);

Параметры

[out] PortOffset

Указывает переменную, предоставляемую вызывающим объектом, в которой эта функция возвращает сопоставленный базовый виртуальный адрес для заданного диапазона портов ввода-вывода относительно шины, заданного значениями InitialPort и NumberOfPorts .

[in] MiniportAdapterHandle

Указывает входные данные дескриптора для MiniportInitializeEx.

[in] InitialPort

Указывает базовый адрес порта относительно шины для диапазона портов, которые необходимо сопоставить.

[in] NumberOfPorts

Указывает количество портов в диапазоне для сопоставления.

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

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

Код возврата Описание
NDIS_STATUS_SUCCESS
Заданный диапазон портов ввода-вывода успешно сопоставлен, поэтому значение PortOffset является допустимым, а сопоставленный диапазон был запрошен в реестре для сетевой карты.
NDIS_STATUS_RESOURCE_CONFLICT
Попытка запросить диапазон портов ввода-вывода в реестре завершилась сбоем, возможно, из-за того, что другой драйвер уже затребовал диапазон для своего устройства. В этом случае NdisMRegisterIoPortRange регистрирует ошибку.
NDIS_STATUS_RESOURCES
Не удалось сопоставить диапазон портов или NDIS не удалось выделить ресурсы для проверка реестра для конфликтов между оборудованием и ресурсами.
NDIS_STATUS_FAILURE
Тип автобуса или номер автобуса выходит за пределы диапазона, либо указанные значения InitialPort и NumberOfPorts были недопустимыми (возможно, не в пространстве портов ввода-вывода текущей платформы).

Комментарии

Драйвер мини-порта вызывает NdisMRegisterIoPortRange из функции MiniportInitializeEx . MiniportInitializeEx должен вызывать NdisMSetMiniportAttributes перед вызовом NdisMRegisterIoPortRange.

NdisMRegisterIoPortRange сопоставляет диапазон адресов устройства, зависящий от шины, который драйвер мини-порта может впоследствии использовать для доступа к диапазону портов ввода-вывода на сетевой карте путем вызова функций NdisRawXxx . Успешный вызов запрашивает указанный диапазон портов ввода-вывода в реестре для сетевой карты вызывающего объекта.

Так как параметры, переданные в NdisRawXxx, были сопоставлены, эти функции выполняются значительно быстрее, чем соответствующий NdisImmediate.. ПортXxx. После успешного вызова NdisMRegisterIoPortRange драйвер мини-порта не может вызвать любой из NdisImmediate.. ПортXxx работает с адресами относительно шины или сопоставленными виртуальными адресами в пределах такого диапазона портов ввода-вывода.

Если вызов NdisMRegisterIoPortRange завершается сбоем, MiniportInitializeEx должен освободить все ресурсы, уже выделенные для сетевого адаптера, а затем завершиться сбоем инициализации для этого сетевого адаптера.

Драйверы сетевых адаптеров с регистрами устройств в пространстве памяти узла вызывают NdisMMapIoSpace , а затем функции NdisRead/WriteRegisterXxx для доступа к регистрам сетевого адаптера.

Требования

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

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

MiniportInitializeEx

NdisMDeregisterIoPortRange

NdisMMapIoSpace

NdisRawReadPortBufferUchar

NdisRawReadPortBufferUlong

NdisRawReadPortBufferUshort

NdisRawReadPortUchar

NdisRawReadPortUlong

NdisRawReadPortUshort

NdisRawWritePortBufferUchar

NdisRawWritePortBufferUlong

NdisRawWritePortBufferUshort

NdisRawWritePortUchar

NdisRawWritePortUlong

NdisRawWritePortUshort

NdisReadRegisterUchar

NdisReadRegisterUlong

NdisReadRegisterUshort

NdisWriteRegisterUchar

NdisWriteRegisterUlong

NdisWriteRegisterUshort