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 元素数组的指针。 每个元素描述微型端口驱动程序在 VIDEO_PORT_CONFIG_INFO 中设置的 EmulatorAccessEntries 的适当子范围。 将 AccessRange 元素的 RangeVisible 成员设置为 TRUE 允许全屏 MS-DOS 应用程序直接访问 I/O 端口范围。 将 RangeVisible 成员设置为 FALSE 会导致应用程序颁发的 INs、 INSB/INSW/INSDs、 OUTs和/或 OUTSB/OUTSW/OUTSDs 捕获到该范围,并将其转发到相应的微型端口驱动程序 SvgaHwIoPortXxx 函数进行验证。
传递给 VideoPortSetTrappedEmulatorPorts 的 AccessRange 数组必须是 HwVidFindAdapter 函数在 VIDEO_PORT_CONFIG_INFO 结构的 EmulatorAccessEntries 数组中设置的 I/O 端口范围 (s) 的正确子集。 访问范围数组中未包含在 EmulatorAccessEntries 数组中的任何 I/O 端口范围将被捕获并反映在用户模式 VDD 中。
返回值
如果 VideoPortSetTrappedEmulatorPorts 成功更改了捕获的端口,它将返回NO_ERROR。 否则,它将返回ERROR_INVALID_PARAMETER。
注解
默认情况下,全屏 MS-DOS 应用程序可直接访问的 I/O 端口 AccessRange 不包含任何访问范围数组元素,这些数组描述 I/O 端口范围,这些端口范围在 VIDEO_PORT_CONFIG_INFO 结构的 EmulatorAccessEntries 数组中也具有相应的元素。 也就是说,默认情况下,具有相应模拟器访问条目的 I/O 端口范围会挂钩到微型端口驱动程序的 SvgaHwIoPortXxx 函数,因此应用程序发出的指令将转发到 SvgaHwIoPortXxx 函数进行验证。
VGA 兼容的 SVGA 微型端口驱动程序可以根据需要通过调用 VideoPortSetTrappedEmulatorPorts 来启用和禁用 I/O 端口范围。 已启用的端口范围允许全屏 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 端口。 在每次切换到此类全屏应用程序时,VGA 兼容微型端口驱动程序的 HwVidStartIO 函数都会使用 IOCTL_VIDEO_ENABLE_VDM VRP 调用。 然后,微型端口驱动程序应重新初始化一组直接访问的默认 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 (包括 Video.h) |
Library | Videoprt.lib |
DLL | Videoprt.sys |
IRQL | PASSIVE_LEVEL |