VideoPortSetTrappedEmulatorPorts 函数 (video.h)
VGA 兼容的 (SVGA) 微型端口驱动程序调用 VideoPortSetTrappedEmulatorPorts 函数,以动态更改 VDM(视频显示监视器)在基于 x86 的计算机的全屏模式下运行时捕获的 I/O 端口列表。
语法
VIDEOPORT_DEPRECATED VIDEOPORT_API VP_STATUS VideoPortSetTrappedEmulatorPorts(
PVOID HwDeviceExtension,
ULONG NumAccessRanges,
[in] PVIDEO_ACCESS_RANGE AccessRange
);
参数
HwDeviceExtension
指向微型端口驱动程序的设备扩展的指针。
NumAccessRanges
指定 AccessRange 数组中的元素数。
[in] AccessRange
指向 VIDEO_ACCESS_RANGE 元素数组的指针。 每个元素描述 EmulatorAccessEntries 微型端口驱动程序在 VIDEO_PORT_CONFIG_INFO中设置的适当子范围。 将 AccessRange 元素的 RangeVisible 成员设置为 TRUE 允许全屏 MS-DOS 应用程序直接访问 I/O 端口范围。 将 RangeVisible 成员设置为 FALSE 会导致应用程序 INs, INSB/INSW/INSDs、OUTs 和/或 OUTSB/OUTSW/OUTSD到要捕获和转发到相应微型端口驱动程序 SvgaHwIoPortXxx 函数进行验证。
传递给 VideoPortSetTrappedEmulatorPorts 的 AccessRange 数组必须是 HwVidFindAdapter 函数在 VIDEO_PORT_CONFIG_INFO 结构的 EmulatorAccessEntries 数组中设置的 I/O 端口范围的正确子集。 访问范围数组中不包含 EmulatorAccessEntries 数组中的任何 I/O 端口范围将捕获并反映在用户模式 VDD。
返回值
VideoPortSetTrappedEmulatorPorts 成功更改捕获的端口时返回NO_ERROR。 否则,它将返回ERROR_INVALID_PARAMETER。
言论
默认情况下,全屏 MS-DOS 应用程序可以访问的 I/O 端口 AccessRange 均不包含描述 VIDEO_PORT_CONFIG_INFO 结构的 EmulatorAccessEntries 数组中也具有相应元素的访问范围数组元素。 也就是说,具有相应模拟器访问条目的 I/O 端口范围默认与微型端口驱动程序的 SvgaHwIoPortXxx 函数挂钩,以便将应用程序颁发的指令转发到 SvgaHwIoPortXxx 函数进行验证。
VGA 兼容的 SVGA 微型端口驱动程序可以根据需要启用和禁用 I/O 端口的范围,并调用 VideoPortSetTrappedEmulatorPorts。 启用的端口范围允许全屏 MS-DOS 应用程序直接访问这些 I/O 端口,而无需将应用程序颁发的程序集指令捕获并转发到微型端口驱动程序的 SvgaHwIoPortXxx 函数,以便首先进行验证。 此类应用程序的直接 I/O 端口访问为用户提供更快的视频 I/O 响应时间。
VideoPortSetTrappedEmulatorPorts 扫描从第一个元素到最后一个元素的 AccessRange 参数数组,并按每个元素中的指示启用和禁用 I/O 端口。 请注意,如果微型端口驱动程序包含相同范围的同一区域(RangeVisible 成员设置为 FALSE,则可以在同一个调用中再次禁用一系列已启用的端口(RangeVisible 成员设置为 TRUE)。 另请注意,微型端口驱动程序可以在 AccessRange 数组的初始元素中启用广泛的 I/O 端口,并在调用 videoPortSetTrappedEmulatorPorts时选择性地禁用后续数组元素中的端口子范围。
所有全屏 MS-DOS 应用程序在基于 x86 的计算机中使用相同的 IOPM(I/O 权限映射),因此,同一组启用或禁用的 I/O 端口。 在每个切换到此类全屏应用程序时,都会使用 IOCTL_VIDEO_ENABLE_VDM VRP调用 VGA 兼容的微型端口驱动程序的 HwVidStartIO 函数。 然后,微型端口驱动程序应重新初始化默认的一组直接访问的 I/O 端口,该端口可以包括 EmulatorAccessEntries 数组中的任何端口。
虽然在基于 x86 的计算机上提供全屏 MS-DOS 应用程序直接访问视频端口可加快应用程序启动的视频作速度,但每个 VGA 兼容的 SVGA 微型端口驱动程序必须继续捕获关键 I/O 端口的子集,以防止此类应用程序挂起计算机。 具体而言,此类微型端口驱动程序应始终 始终 将应用程序 I/O 捕获到 VGA 兼容的适配器序列器和杂项输出寄存器。 此类微型端口驱动程序还应捕获并验证应用程序颁发的直接 I/O,这可能导致计算机挂起任何依赖于适配器的 I/O 端口子集。
再次调用 VideoPortSetTrappedEmulatorPorts 并重置 AccessRange 元素的 RangeVisible 成员,以 FALSE 会导致应用程序颁发的指示将该区域转发到相应的微型端口驱动程序 SvgaHwIoPortXxx 函数。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 在 Windows 2000 及更高版本的 Windows作系统中可用。 |
目标平台 | 桌面 |
标头 | video.h (include Video.h) |
库 | Videoprt.lib |
DLL | Videoprt.sys |
IRQL | PASSIVE_LEVEL |