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


Объекты IddCx

Платформа IddCx (Indirect Display Driver Class eXtension) использует расширяемую объектную модель UMDF для представления различных компонентов косвенных устройств отображения. Объектная модель UMDF позволяет ассоциировать специфичное для драйвера хранилище с каждым объектом IddCx (и, следовательно, UMDF). Дополнительные сведения см. в статье об объектной модели UMDF.

Порядок создания объектов IDD:

  • Драйвер сначала создает объект IDDCX_ADAPTER .
  • Затем драйвер создает объект IDDCX_MONITOR .
  • После создания объектов IDDCX_ADAPTER и IDDCX_MONITOR ОС создает IDDCX_SWAPCHAINи IDDCX_OPMCTX объекты и отправляет их драйверу.

В следующих разделах содержатся дополнительные сведения об этих объектах.

IDDCX_ADAPTER

Этот объект представляет один логический адаптер отображения, созданный драйвером в двух этапном процессе:

  • Драйвер вызывает функцию обратного вызова IddCxAdapterInitAsync.
  • ОС вызывает DDI-функцию драйвера EvtIddCxAdapterInitFinished, чтобы завершить инициализацию.

Модель IDD не имеет явного коллбэка адаптера для уничтожения. После успешного завершения инициализации адаптер остаётся действительным до тех пор, пока устройство UMDF, переданное во время инициализации, не будет остановлено. Когда драйвер косвенного отображения (IDD) создает адаптер, он предоставляет статические сведения о адаптере непрямого дисплея.

Обработка многофункционных устройств

В простейшем случае существует взаимооднозначное сопоставление между объектом устройства UMDF, созданным подсистемой plug and play для подключенного косвенного устройства отображения, и объектом IDDCX_ADAPTER, создаваемым IDD.

Существуют более сложные сценарии, в которых один непрямый индикатор отображения содержит несколько устройств plug and play. Например, косвенное решение для отображения может иметь несколько функций устройства PnP, таких как микрофон (звуковой драйвер) и камера (видео драйвер). В таких ситуациях IDD отвечает за создание единственного объекта IDDCX_ADAPTER для нескольких объектов устройств UMDF, созданных для каждого устройства PnP. Драйвер должен учитывать следующие моменты в этом сценарии:

  • IDDCX_ADAPTER следует создать только после успешного запуска всех устройств PnP, составляющих решение косвенного отображения.
  • Драйвер должен передать один WDFDEVICE при создании адаптера, поэтому ему требуется логика для выбора, какое устройство UMDF он передаст.
  • Если у любого из устройств, составляющих непрямой адаптер дисплея, возникает ошибка оборудования, драйвер должен сообщить об ошибке для всех устройств, составляющих адаптер.

IDDCX_MONITOR

Этот объект представляет определенный монитор, подключенный к одному из соединителей на косвенном адаптере отображения.

Драйвер создает объект монитора в двухэтапном процессе:

  • Сначала вызывает обратный вызов IddCxMonitorCreate , чтобы создать объект IDDCX_MONITOR .
  • Затем он вызывает обратный вызов IddCxMonitorArrival, чтобы завершить процесс прибытия монитора.

При отключении монитора драйвер вызывает обратный вызов IddCxMonitorDeparture , чтобы сообщить об этом. Этот вызов приводит к уничтожению объекта IDDCX_MONITOR . Даже если тот же монитор отключен, а затем повторно подключен, необходимо вызвать повторную последовательность IddCxMonitorDeparture/IddCxMonitorArrival .

IDDCX_MONITOR является дочерним объектом IDDCX_ADAPTER.

IDDCX_SWAPCHAIN

Этот объект представляет swapchain, которая предоставляет изображения рабочего стола для отображения на подключенном мониторе. Цепочка буферов содержит несколько буферов, чтобы ОС могла создавать следующий образ рабочего стола в одном буфере, пока IDD получает доступ к другому буферу. IDDCX_SWAPCHAIN является дочерним элементом IDDCX_MONITOR поэтому в любое время существует только одна назначенная цепочка переключения для заданного монитора.

ОС создает и уничтожает объекты IDDCX_SWAPCHAIN и назначает/отменяет назначение их на мониторы с помощью вызовов EvtIddCxMonitorAssignSwapChain и EvtIddCxMonitorUnassignSwapChain.

IDDCX_OPMCTX

Этот объект представляет активный контекст диспетчера защиты выходных данных (OPM) из одного контекста OPM приложения, который приложение может использовать для управления защитой выходных данных на одном мониторе. Одновременно несколько контекстов OPM могут быть активными в заданном мониторе. ОС вызывает драйвер для создания и уничтожения контекстов OPM с помощью вызовов EvtIddCxMonitorOPMCreateProtectedOutput и EvtIddCxMonitorOPMDestroyProtectedOutput DDI.