VideoPortGetDeviceBase 函数 (video.h)
VideoPortGetDeviceBase 函数将一系列相对于总线的设备内存或 I/O 地址映射到系统空间。
语法
VIDEOPORT_DEPRECATED VIDEOPORT_API PVOID VideoPortGetDeviceBase(
PVOID HwDeviceExtension,
PHYSICAL_ADDRESS IoAddress,
ULONG NumberOfUchars,
UCHAR InIoSpace
);
参数
HwDeviceExtension
指向微型端口驱动程序的设备扩展的指针。
IoAddress
要映射的范围的基本物理地址。 通过调用 VideoPortGetDeviceData、 VideoPortGetRegistryParameters 或 VideoPortGetAccessRanges 获取此总线相对值。 否则,此值是驱动程序提供的设备内存或 I/O 端口的默认基址。
必须通过上述调用 VideoPortVerifyAccessRanges 或 VideoPortGetAccessRanges 成功声明注册表中 IoAddress 和 NumberOfUchars 描述的范围。
NumberOfUchars
要映射的字节数(从 IoAddress 开始)。
InIoSpace
IoAddress 范围的位置。 此参数可以是以下标志之一,也可以是这些标志的 ORed 兼容组合。
标记 | 含义 |
---|---|
VIDEO_MEMORY_SPACE_DENSE | 已过时。 |
VIDEO_MEMORY_SPACE_IO | 地址范围位于 I/O 空间中,而不是内存空间中。 |
VIDEO_MEMORY_SPACE_MEMORY | 地址范围位于内存空间中,而不是在 I/O 空间中。 |
VIDEO_MEMORY_SPACE_P6CACHE | 处理器聚合一系列写入操作,将其发送到缓存行,然后刷新缓存。 仅当未设置VIDEO_MEMORY_SPACE_IO时,此标志才有意义。 将视频内存指定为写入合并 (WC) 。 有关 WC 缓存的信息,请参阅 视频微型端口驱动程序中的写入合并内存 网站一文。 |
返回值
如果成功, VideoPortGetDeviceBase 将返回映射的基虚拟地址。 如果无法映射指定的总线相对范围, VideoPortGetDeviceBase 将返回 NULL。
注解
可以将映射的虚拟地址传递给 VideoPortReadXxx、 VideoPortWriteXxx 和 VideoPortXxx内存 函数, VideoPortMapMemory 和 VideoPortUnmapMemory 除外。
必须从微型端口驱动程序的 HwVidFindAdapter、HwVidQueryDeviceCallback 或 HwVidQueryNamedValueCallback 函数调用 VideoPortGetDeviceBase。
在 HwVidFindAdapter 返回控件之前,应将 VideoPortGetDeviceBase 返回的映射基址和映射访问范围的长度存储在适配器的设备扩展 (HwDeviceExtension) 指向,供以后使用。
访问映射的地址空间必须遵循以下规则:
- 如果 InIoSpace 为 VIDEO_MEMORY_SPACE_IO,指示地址位于 I/O 空间中,则此函数返回的虚拟地址应传递到 VideoPortReadPortXxx、 VideoPortWritePortXxx、 VideoPortReadPortBufferXxx 和 VideoPortWritePortBufferXxx 函数,其中 Xxx 为 Uchar、 Ushort 或 Ulong。
- 如果 InIoSpace 为 VIDEO_MEMORY_SPACE_MEMORY,表示地址不在 I/O 空间中,而是在内存空间中,则此函数返回的虚拟地址应传递给 VideoPortReadRegisterXxx、 VideoPortWriteRegisterXxx、 VideoPortReadRegisterBufferXxx 和 VideoPortWriteRegisterBufferXxx 函数,其中 Xxx 为 Uchar、 Ushort 或 Ulong。
- 驱动程序不得访问超出 NumberOfUchars 分隔范围的地址。
(UMA) 显示设备的每个通用内存体系结构都使用位于 main 内存中的帧缓冲区,而不是位于 PCI 总线上。 在这种情况下,请勿调用 VideoPortMapMemory 来映射帧缓冲区。 若要将 UMA 帧缓冲区映射到系统空间,请调用 MmMapIoSpace。
如果微型端口驱动程序不支持已为其映射逻辑范围的适配器,则必须先执行两个步骤,然后才能将控制权返回到 DriverEntry 函数:调用 VideoPortFreeDeviceBase 以从系统空间取消映射以前映射的范围,并调用 VideoPortGetAccessRanges 或 VideoPortVerifyAccessRanges 以释放其在注册表中的区域上的声明。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 适用于 Windows 2000 及更高版本的 Windows 操作系统。 |
目标平台 | 桌面 |
标头 | video.h (包括 Video.h) |
Library | Videoprt.lib |
DLL | Videoprt.sys |
IRQL | PASSIVE_LEVEL |