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 可以返回以下任何状态值:
返回代码 | 描述 |
---|---|
|
已成功映射设备内存范围,因此 VirtualAddress 的值有效,并且映射的范围已在 NIC 的注册表中声明。 |
|
尝试声明注册表中的设备内存范围失败,可能是因为另一个驱动程序已经为其设备声明了该范围。 如果发生这种情况,NdisMMapIoSpace 记录错误。 |
|
无法映射内存或无法分配足够的虚拟内存。 |
|
总线类型或总线号不在范围内,或者给定的 PhysicalAddress,长度 无效(可能不在当前平台的 I/O 空间内)。 |
言论
此函数由 NIC 的驱动程序调用,这些驱动程序具有板载内存或主机的 I/O 空间中显示的设备寄存器。 例如,使用 PIO 调用的 NIC 的驱动程序 NdisMMapIoSpace。
成功调用 NdisMMapIoSpace 声明驱动程序 NIC 注册表中的硬件资源。 因此,只有 MiniportInitializeEx 函数调用 NdisMMapIoSpace。
NdisMMapIoSpace 将变量 VirtualAddress 设置为 NULL(如果未返回NDIS_STATUS_SUCCESS)。
MiniportInitializeEx 要么从驱动程序的 Parameters 注册表项中获取 PhysicalAddress 值,也可以通过调用特定于总线类型的 NdisXxx 配置函数。 给定的物理地址范围必须位于当前平台的 I/O 空间内。 使用主机物理内存地址调用 NdisMMapIoSpace 是编程错误。
如果 MiniportInitializeEx 随后无法初始化 NIC,则微型端口驱动程序必须调用倒数 NdisMUnmapIoSpace,才能在系统资源上释放其声明。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows Vista 中支持 NDIS 6.0 和 NDIS 5.1 驱动程序(请参阅 NdisMMapIoSpace (NDIS 5.1)。 Windows XP 中支持 NDIS 5.1 驱动程序(请参阅 NdisMMapIoSpace (NDIS 5.1)。 |
目标平台 | 普遍 |
标头 | ndis.h (包括 Ndis.h) |
库 | Ndis.lib |
IRQL | PASSIVE_LEVEL |
DDI 符合性规则 | Irql_Miniport_Driver_Function(ndis),NdisMMapIoSpace(ndis) |