NdisMMapIoSpace 函数 (ndis.h)

NdisMMapIoSpace 将给定的相对于总线的“物理”范围的设备 RAM 或寄存器映射到系统空间虚拟范围。

语法

NDIS_STATUS NdisMMapIoSpace(
  [out] PVOID                 *VirtualAddress,
  [in]  NDIS_HANDLE           MiniportAdapterHandle,
  [in]  NDIS_PHYSICAL_ADDRESS PhysicalAddress,
  [in]  UINT                  Length
);

参数

[out] VirtualAddress

指向调用方提供的变量的指针,如果调用成功,该变量设置为转换后的虚拟地址。

[in] MiniportAdapterHandle

指定 MiniportInitializeEx 的句柄输入。

[in] PhysicalAddress

指定要映射的设备内存范围的总线相对基物理地址。

[in] Length

指定要映射的字节数。

返回值

NdisMMapIoSpace 可以返回以下任何状态值:

返回代码 说明
NDIS_STATUS_SUCCESS
已成功映射设备内存范围,因此 VirtualAddress 中的值有效,并且映射的范围已在 NIC 的注册表中声明。
NDIS_STATUS_RESOURCE_CONFLICT
尝试在注册表中声明设备内存范围失败,可能是因为另一个驱动程序已为其设备声明了该范围。 如果发生这种情况,NdisMMapIoSpace 会记录错误。
NDIS_STATUS_RESOURCES
无法映射内存或无法分配足够的虚拟内存。
NDIS_STATUS_FAILURE
总线类型或总线编号不在范围内,或者给定 的 PhysicalAddressLength 无效 (可能不在当前平台) 的 I/O 空间中。

注解

此函数由 NIC 的驱动程序调用,这些 NIC 具有板载内存或出现在主机的 I/O 空间中的设备寄存器库。 例如,使用 PIO 的 NIC 的驱动程序调用 NdisMMapIoSpace

成功调用 NdisMMapIoSpace 会声明驱动程序 NIC 注册表中的硬件资源。 因此,只有 MiniportInitializeEx 函数调用 NdisMMapIoSpace

如果 VirtualAddress 中的变量未返回NDIS_STATUS_SUCCESS,则 NdisMMapIoSpace 会将该变量设置为 NULL

MiniportInitializeEx 可以从驱动程序的参数注册表项获取 PhysicalAddress 值,也可以通过调用特定于总线类型的 NdisXxx 配置函数获取。 给定的物理地址范围必须位于当前平台的 I/O 空间内。 使用主机物理内存地址调用 NdisMMapIoSpace 是一个编程错误。

如果 MiniportInitializeEx 随后无法初始化 NIC(如果从计算机中删除 NIC)和/或在驱动程序卸载时,微型端口驱动程序必须调用对等的 NdisMUnmapIoSpace 来释放其在系统资源上的声明。

要求

要求
最低受支持的客户端 NDIS 6.0 和 NDIS 5.1 驱动程序支持 (请参阅 Windows Vista 中的 NdisMMapIoSpace (NDIS 5.1) ) 。 NDIS 5.1 驱动程序支持 (请参阅 Windows XP 中的 NdisMMapIoSpace (NDIS 5.1) ) 。
目标平台 通用
标头 ndis.h (包括 Ndis.h)
Library Ndis.lib
IRQL PASSIVE_LEVEL
DDI 符合性规则 Irql_Miniport_Driver_Function (ndis) NdisMMapIoSpace (ndis)

另请参阅

MiniportHaltEx

MiniportInitializeEx

NdisMGetBusData

NdisMUnmapIoSpace

NdisOpenConfigurationEx

NdisReadRegisterUchar

NdisReadRegisterUlong

NdisReadRegisterUshort

NdisWriteRegisterUchar

NdisWriteRegisterUlong

NdisWriteRegisterUshort