验证 SvgaHwIoPortXxx 中的指令

VGA 兼容微型端口驱动程序的 HwVidFindAdapter 中所述,为直接访问的 I/O 端口设置的 IOPM 通常包括除序列器寄存器和杂项输出寄存器之外的所有 SVGA 寄存器,VGA 兼容微型端口驱动程序将继续使用其 SvgaHwIoPortXxx 函数监视这些寄存器。 排序器在 VGA 兼容的视频适配器上注册控制内部芯片计时。 如果全屏 MS-DOS 应用程序在同步重置期间接触其他适配器寄存器,则计算机可能会挂起。 同样,如果将杂项输出寄存器设置为选择不存在的时钟,则计算机可能会挂起。

与 VGA 兼容的微型端口驱动程序必须确保全屏 MS-DOS 应用程序不会发出导致计算机挂起的指令。 每个此类微型端口驱动程序都必须提供 SvgaHwIoPortXxx 函数,用于监视应用程序向适配器排序器寄存器和其他输出寄存器的 I/O 端口发出的指令。 对于具有特殊功能的适配器,每个新的 VGA 兼容微型端口驱动程序还必须监视并继续验证应用程序可能向其发送可能挂起计算机的任何指令序列的任何 I/O 端口。

每当应用程序尝试访问序列器时钟寄存器时, SvgaHwIoPortXxx 函数都必须更改 IOPM,以便捕获同步重置期间传入的所有指令。 一旦应用程序发送影响排序器的指令或尝试写入杂项输出寄存器时, SvgaHwIoPortXxx 函数应通过调用 VideoPortSetTrappedEmulatorPorts 来调整 IOPM,以禁用对所有适配器寄存器的直接访问。

微型端口驱动程序提供的 SvgaHwIoPortXxx 函数应缓冲后续 IN (或 INSB/INSW/INSD) 和/或 OUT (或 OUT (或 OUTSB/OUTSW/OUTSD) VIDEO_PORT_CONFIG_INFO (说明,请参阅 VGA 兼容的微型端口驱动程序的 HwVidFindAdapter) 同步重置完成,或直到应用程序还原杂项输出寄存器或将其重置为“安全”时钟。

然后,微型端口驱动程序负责检查缓冲指令是否无法挂起计算机。 否则,微型端口驱动程序应处理缓冲的指令,通常通过使用驱动程序提供的 HwVidSynchronizeExecutionCallback 函数调用 VideoPortSynchronizeExecution 否则,微型端口驱动程序应放弃缓冲指令。