Функция 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

См. также раздел

EMULATOR_ACCESS_ENTRY

HwVidFindAdapter

HwVidStartIO

VIDEO_ACCESS_RANGE

VIDEO_PORT_CONFIG_INFO

VideoPortSynchronizeExecution