Функция 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 может возвращать одно из следующих элементов:
Код возврата | Описание |
---|---|
|
Заданный диапазон портов ввода-вывода успешно сопоставлен, поэтому значение PortOffset является допустимым, а сопоставленный диапазон был запрошен в реестре для сетевой карты. |
|
Попытка запросить диапазон портов ввода-вывода в реестре завершилась сбоем, возможно, из-за того, что другой драйвер уже затребовал диапазон для своего устройства. В этом случае NdisMRegisterIoPortRange регистрирует ошибку. |
|
Не удалось сопоставить диапазон портов или NDIS не удалось выделить ресурсы для проверка реестра для конфликтов между оборудованием и ресурсами. |
|
Тип автобуса или номер автобуса выходит за пределы диапазона, либо указанные значения 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) |