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 可以返回以下项之一:
返回代码 | 说明 |
---|---|
|
已成功映射给定的 I/O 端口范围,因此 PortOffset 中的值有效,并且映射的范围已在 NIC 的注册表中声明。 |
|
尝试在注册表中声明 I/O 端口范围失败,可能是因为另一个驱动程序已为其设备声明了该范围。 如果发生这种情况,NdisMRegisterIoPortRange 会记录错误。 |
|
无法映射端口范围,或者 NDIS 无法分配资源以检查注册表,以用于硬件资源冲突。 |
|
总线类型或总线编号不在范围内,或者给定 的 InitialPort 和 NumberOfPorts 无效 (可能不在当前平台) 的 I/O 端口空间中。 |
注解
微型端口驱动程序从其 MiniportInitializeEx 函数调用 NdisMRegisterIoPortRange。 MiniportInitializeEx 必须调用在调用 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) |