NdisMRegisterIoPortRange 函数 (ndis.h)

NdisMRegisterIoPortRange 使用 NdisRawReadPortXxx 和 NdisRawWritePortXxx 函数设置对设备 I/O 端口的驱动程序访问权限,并声明该驱动程序的 NIC 注册表中的 I/O 端口地址范围。

语法

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

参数

[out] PortOffset

指定调用方提供的变量,此函数在其中返回由 InitialPort 和NumberOfPorts 指定的给定总线相对 I/O 端口范围的映射基虚拟地址。

[in] MiniportAdapterHandle

指定 MiniportInitializeEx 的句柄输入。

[in] InitialPort

指定要映射的一系列端口的总线相对基端口地址。

[in] NumberOfPorts

指定要映射的范围中的端口数。

返回值

NdisMRegisterIoPortRange 可以返回以下项之一:

返回代码 说明
NDIS_STATUS_SUCCESS
已成功映射给定的 I/O 端口范围,因此 PortOffset 中的值有效,并且映射的范围已在 NIC 的注册表中声明。
NDIS_STATUS_RESOURCE_CONFLICT
尝试在注册表中声明 I/O 端口范围失败,可能是因为另一个驱动程序已为其设备声明了该范围。 如果发生这种情况,NdisMRegisterIoPortRange 会记录错误。
NDIS_STATUS_RESOURCES
无法映射端口范围,或者 NDIS 无法分配资源以检查注册表,以用于硬件资源冲突。
NDIS_STATUS_FAILURE
总线类型或总线编号不在范围内,或者给定 的 InitialPortNumberOfPorts 无效 (可能不在当前平台) 的 I/O 端口空间中。

注解

微型端口驱动程序从其 MiniportInitializeEx 函数调用 NdisMRegisterIoPortRangeMiniportInitializeEx 必须调用在调用 NdisMRegisterIoPortRange 之前,NdisMSetMiniportAttributes

NdisMRegisterIoPortRange 映射一个相对于总线的设备地址范围,微型端口驱动程序随后可以使用该范围通过调用 NdisRawXxx 函数来访问 NIC 上的 I/O 端口范围。 成功的调用会声明调用方 NIC 注册表中指定范围的 I/O 端口。

由于已映射传递给 NdisRawXxx 的参数,因此这些函数的运行速度明显快于相应的 NdisImmediate。。端口Xxx。 成功调用 NdisMRegisterIoPortRange 后,微型端口驱动程序无法调用任何 NdisImmediate.。端口Xxx 在此类 I/O 端口范围内具有总线相对地址或映射虚拟地址。

如果对 NdisMRegisterIoPortRange 的 调用失败, MiniportInitializeEx 应释放它已为 NIC 分配的所有资源,然后为该 NIC 初始化失败。

主机内存空间中具有设备寄存器的 NIC 的驱动程序调用 NdisMMapIoSpace ,随后调用 NdisRead/WriteRegisterXxx 函数来访问 NIC 寄存器。

要求

要求
最低受支持的客户端 NDIS 6.0 和 NDIS 5.1 驱动程序支持 (请参阅 Windows Vista 中的 NdisMRegisterIoPortRange (NDIS 5.1) ) 。 NDIS 5.1 驱动程序支持 (请参阅 Windows XP 中的 NdisMRegisterIoPortRange (NDIS 5.1) ) 。
目标平台 通用
标头 ndis.h (包括 Ndis.h)
Library 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