Поделиться через


Обзор драйвера непрямого отображения

Модель непрямого драйвера отображения (IDD) предоставляет простую модель драйвера в пользовательском режиме для поддержки мониторов, которые не подключены к традиционным выходным данным графического процессора. Некоторые типичные сценарии, в которых требуется идентификатор:

  • Потоковая передача выходных данных отображения по сети удаленному клиенту (удаленному отображению).
  • Создание виртуальных мониторов для таких приложений, как среды виртуального рабочего стола (виртуальные экраны).
  • Подключение адаптера к компьютеру через USB с обычным монитором (VGA, DVI, HDMI, DP и т. д.) подключен к нему.

Реализация IDD

Идентификатор — это сторонний драйвер UMDF для устройства. Вы можете разработать идентификатор с помощью функциональных возможностей, предоставляемых IddCx (класс eXtension непрямого дисплея) для взаимодействия с графическими подсистемами Windows следующими способами:

  • Создайте графический адаптер, представляющий непрямое устройство отображения.
  • Мониторы отчетов подключены и отключены от системы.
  • Укажите описания подключенных мониторов.
  • Укажите доступные режимы отображения.
  • Поддержка других функций отображения, таких как аппаратный курсор мыши, гамма-связь, связь I2C и защищенное содержимое.
  • Обработайте изображения рабочего стола для отображения на мониторе.

Так как ИДЕНТИФИКАТОР является драйвером UMDF, он также отвечает за реализацию всех функций UMDF , таких как связь с устройствами, управление питанием, подключаемый модуль и т. д.

IdD выполняется в сеансе 0 без каких-либо компонентов, работающих в сеансе пользователя, поэтому любая нестабильность драйвера не влияет на стабильность системы в целом.

На следующей схеме представлен обзор архитектуры.

Схема, показывющая драйвер косвенного отображения в архитектуре UMDF.

Модель пользовательского режима

Идентификатор — это модель только в пользовательском режиме без поддержки компонентов режима ядра. Таким образом, драйвер может использовать любые API DirectX для обработки образа рабочего стола. Фактически IddCx предоставляет образ рабочего стола для кодирования в поверхности DirectX.

Драйвер не должен вызывать API режима пользователя, которые не подходят для использования драйвера, таких как GDI, интерфейсы API окон, OpenGL или Vulkan.

Идентификатор должен быть создан в качестве универсального драйвера windows, чтобы его можно было использовать на нескольких платформах Windows.

Во время сборки:

  • Идентификатор UMDF объявляет версию IddCx, для нее была создана.
  • ОС гарантирует, что правильная версия IddCx загружается при загрузке драйвера.

Соглашения об именовании функций и обратного вызова IddCx

Префикс Тип Примечания.
EVT_IDD_CX_XXX Функция обратного вызова IDD Идентификаторы реализуют такие обратные вызовы, как IddCx, такие как EVT_IDD_CX_ADAPTER_COMMIT_MODES, так и соответствующие обратные вызовы WDF, такие как EVT_WDF_DEVICE_D0_EXIT.
IddCxXxx Function Системные функции расширения класса IddCx, которые могут вызывать идентификаторы; например, IddCxAdapterInitAsync.
PFN_IDDCX_XXX Указатели на функции IddCx Идентификаторы не используют эти указатели. Вместо этого драйверы должны использовать эквивалентные функции IddCxXxx .

Пример кода

Корпорация Майкрософт предоставляет пример реализации идентификаторов в GitHub для примеров драйверов Windows. В этом примере показано, как подключить монитор, как реагировать на набор режимов и как получать кадры.