VideoPortGetDeviceBase 函数 (video.h)

VideoPortGetDeviceBase 函数将一系列相对于总线的设备内存或 I/O 地址映射到系统空间。

语法

VIDEOPORT_DEPRECATED VIDEOPORT_API PVOID VideoPortGetDeviceBase(
  PVOID            HwDeviceExtension,
  PHYSICAL_ADDRESS IoAddress,
  ULONG            NumberOfUchars,
  UCHAR            InIoSpace
);

参数

HwDeviceExtension

指向微型端口驱动程序的设备扩展的指针。

IoAddress

要映射的范围的基本物理地址。 通过调用 VideoPortGetDeviceDataVideoPortGetRegistryParametersVideoPortGetAccessRanges 获取此总线相对值。 否则,此值是驱动程序提供的设备内存或 I/O 端口的默认基址。

必须通过上述调用 VideoPortVerifyAccessRanges 或 VideoPortGetAccessRanges 成功声明注册表中 IoAddressNumberOfUchars 描述的范围

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

注解

可以将映射的虚拟地址传递给 VideoPortReadXxxVideoPortWriteXxxVideoPortXxx内存 函数, VideoPortMapMemoryVideoPortUnmapMemory 除外。

必须从微型端口驱动程序的 HwVidFindAdapterHwVidQueryDeviceCallbackHwVidQueryNamedValueCallback 函数调用 VideoPortGetDeviceBase

HwVidFindAdapter 返回控件之前,应将 VideoPortGetDeviceBase 返回的映射基址和映射访问范围的长度存储在适配器的设备扩展 (HwDeviceExtension) 指向,供以后使用。

访问映射的地址空间必须遵循以下规则:

  • 如果 InIoSpace 为 VIDEO_MEMORY_SPACE_IO,指示地址位于 I/O 空间中,则此函数返回的虚拟地址应传递到 VideoPortReadPortXxxVideoPortWritePortXxxVideoPortReadPortBufferXxxVideoPortWritePortBufferXxx 函数,其中 XxxUcharUshortUlong
  • 如果 InIoSpace 为 VIDEO_MEMORY_SPACE_MEMORY,表示地址不在 I/O 空间中,而是在内存空间中,则此函数返回的虚拟地址应传递给 VideoPortReadRegisterXxxVideoPortWriteRegisterXxxVideoPortReadRegisterBufferXxxVideoPortWriteRegisterBufferXxx 函数,其中 XxxUcharUshortUlong
  • 驱动程序不得访问超出 NumberOfUchars 分隔范围的地址。
VideoPortGetDeviceBaseVideoPortMapMemory 都可以由视频微型端口驱动程序调用,以将视频内存映射到虚拟地址空间。 如果调用这两个函数来映射相同的物理地址,或者多次调用其中一个函数来映射相同的物理地址,则可能有多个虚拟地址范围映射到同一物理地址范围。 在这种情况下,必须在所有这些调用中将 InIoSpace 参数的 VIDEO_MEMORY_SPACE_P6CACHE 标志设置为相同的值。

(UMA) 显示设备的每个通用内存体系结构都使用位于 main 内存中的帧缓冲区,而不是位于 PCI 总线上。 在这种情况下,请勿调用 VideoPortMapMemory 来映射帧缓冲区。 若要将 UMA 帧缓冲区映射到系统空间,请调用 MmMapIoSpace

如果微型端口驱动程序不支持已为其映射逻辑范围的适配器,则必须先执行两个步骤,然后才能将控制权返回到 DriverEntry 函数:调用 VideoPortFreeDeviceBase 以从系统空间取消映射以前映射的范围,并调用 VideoPortGetAccessRangesVideoPortVerifyAccessRanges 以释放其在注册表中的区域上的声明。

要求

要求
最低受支持的客户端 适用于 Windows 2000 及更高版本的 Windows 操作系统。
目标平台 桌面
标头 video.h (包括 Video.h)
Library Videoprt.lib
DLL Videoprt.sys
IRQL PASSIVE_LEVEL

另请参阅

HwVidFindAdapter

HwVidQueryDeviceCallback

HwVidQueryNamedValueCallback

VideoPortCompareMemory

VideoPortFreeDeviceBase

VideoPortGetAccessRanges

VideoPortGetDeviceData

VideoPortGetRegistryParameters

VideoPortMoveMemory

VideoPortVerifyAccessRanges

VideoPortZeroDeviceMemory

VideoPortZeroMemory