Функция VideoPortSetTrappedEmulatorPorts (video.h)
Драйверы мини-портов, совместимые с VGA (SVGA), вызывают функцию VideoPortSetTrappedEmulatorPorts , чтобы динамически изменять список портов ввода-вывода, которые перехватываются при выполнении видеоэкранного монитора VDM в полноэкранном режиме на компьютере с архитектурой x86.
Синтаксис
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. Задание для элемента RangeVisible элемента AccessRangeзначения TRUE обеспечивает прямой доступ к диапазону портов ввода-вывода полноэкранным приложением MS-DOS. Задание для элемента RangeVisibleзначения FALSE приводит к тому, что выданные приложением значения INs, INSB/INSW/INSDs, OUTs и (или ) OUTSB/OUTSB/OUTSDs будут захвачены в этот диапазон и перенаправляются в соответствующий драйвер miniport SvgaHwIoPortXxx для проверки.
Массив AccessRange, передаваемый в VideoPortSetTrappedEmulatorPorts , должен быть соответствующим подмножеством диапазонов портов ввода-вывода, настроенных функцией HwVidFindAdapter в массиве EmulatorAccessEntriesструктуры VIDEO_PORT_CONFIG_INFO . Все диапазоны портов ввода-вывода в массиве диапазонов доступа, которые не включены в массив EmulatorAccessEntries , перехватываются и отражаются на VDD пользовательского режима.
Возвращаемое значение
VideoPortSetTrappedEmulatorPorts возвращает NO_ERROR, если он успешно изменил захваченные порты. В противном случае возвращается ERROR_INVALID_PARAMETER.
Комментарии
По умолчанию accessRange портов ввода-вывода, к которым могут обращаться полноэкранные приложения MS-DOS, напрямую не включает ни один из элементов массива диапазонов доступа, описывающих диапазоны портов ввода-вывода, которые также имеют соответствующие элементы в массиве EmulatorAccessEntriesструктуры VIDEO_PORT_CONFIG_INFO . То есть диапазоны портов ввода-вывода с соответствующими записями доступа эмулятора по умолчанию подключены к функциям SvgaHwIoPortXxx драйвера мини-порта, поэтому выданные приложением инструкции перенаправляются в функции SvgaHwIoPortXxx для проверки.
Совместимый с VGA драйвер svga miniport может включать и отключать диапазоны портов ввода-вывода по мере необходимости с помощью вызовов VideoPortSetTrappedEmulatorPorts. Включенные диапазоны портов позволяют полноэкранному приложению MS-DOS напрямую обращаться к этим портам ввода-вывода без предварительной проверки инструкций сборки, выданных приложением, и перенаправляемых в функции SvgaHwIoPortXxxx . Прямой доступ к порту ввода-вывода для такого приложения позволяет пользователю быстрее реагировать на видео.
VideoPortSetTrappedEmulatorPorts сканирует массив параметров AccessRange от первого элемента до последнего, включая и отключая порты ввода-вывода, как указано в каждом элементе. Обратите внимание, что диапазон включенных портов (элемент RangeVisible имеет значение TRUE) можно снова отключить в том же вызове, если драйвер мини-порта содержит повторяющееся описание того же диапазона с элементом RangeVisible, равнымFALSE. Обратите внимание также, что драйвер минипорта может включить широкий спектр портов ввода-вывода в исходном элементе массива AccessRange и выборочно отключить поддиапозоны портов в последующих элементах массива при вызове VideoPortSetTrappedEmulatorPorts.
Все полноэкранные приложения MS-DOS используют одно и то же ioPM (сопоставление разрешений ввода-вывода) на компьютерах с архитектурой x86 и, следовательно, тот же набор включенных или отключенных портов ввода-вывода. При каждом переходе на такое полноэкранное приложение функция HwVidStartIO драйвера мини-порта, совместимая с VGA, вызывается с помощью IOCTL_VIDEO_ENABLE_VDM VRP. Затем драйвер мини-порта должен повторно инициализировать набор по умолчанию доступных портов ввода-вывода, которые могут включать в себя любые порты в массиве EmulatorAccessEntries .
Хотя предоставление полноэкранным приложениям MS-DOS на компьютерах с архитектурой x86 прямой доступ к видеопортам ускоряет операции видео, инициированные приложениями, каждый драйвер svGA-совместимого с VGA минипорта должен продолжать перехватывать подмножество критически важных портов ввода-вывода, чтобы предотвратить такое приложение от зависания компьютера. В частности, такие драйверы минипорта всегда должны перехватывать ввод-вывод приложения в последовательности адаптеров, совместимых с VGA, и прочие выходные регистры. Такой драйвер минипорта также должен перехватывать и проверять прямой ввод-вывод, выданный приложением, что может привести к зависаю компьютера для любого дополнительного подмножества портов ввода-вывода, зависящее от адаптера.
Повторный вызов VideoPortSetTrappedEmulatorPorts и сброс элемента RangeVisible элемента AccessRange в значение FALSE приводит к тому, что выданные приложением инструкции для этого диапазона будут перенаправляться в соответствующую функцию Драйвера мини-порта SvgaHwIoPortXxx .
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно в Windows 2000 и более поздних версиях операционных систем Windows. |
Целевая платформа | Персональный компьютер |
Верхняя часть | video.h (включить Video.h) |
Библиотека | Videoprt.lib |
DLL | Videoprt.sys |
IRQL | PASSIVE_LEVEL |