Objetos IddCx
O IddCx (eXtension da Classe de Driver de Exibição Indireta) usa o modelo de objeto UMDF extensível para representar os componentes do dispositivo de exibição indireto. O modelo de objeto UMDF permite que o armazenamento específico do driver seja associado a cada objeto IddCx (e, portanto, UMDF). Confira Modelo de Objeto UMDF para obter mais informações.
A ordem na qual os objetos IDD são criados é:
- Primeiro, o driver cria um objeto IDDCX_ADAPTER .
- Em seguida, o driver cria um objeto IDDCX_MONITOR .
- Depois que os objetos IDDCX_ADAPTER e IDDCX_MONITOR são criados, o sistema operacional cria objetos IDDCX_SWAPCHAIN e IDDCX_OPMCTX e os envia para o driver.
As seções a seguir fornecem mais detalhes sobre esses objetos.
IDDCX_ADAPTER
Esse objeto representa um único adaptador de exibição lógico criado pelo driver em um processo de dois estágios:
- O driver chama a função de retorno de chamada IddCxAdapterInitAsync .
- O sistema operacional chama o DDI EvtIddCxAdapterInitFinished do driver para concluir a inicialização.
O modelo de IDD não tem um retorno de chamada de adaptador de destruição explícito. Depois que a sequência de inicialização do adaptador for concluída com êxito, o adaptador será válido até que o dispositivo UMDF passado no momento da inicialização seja interrompido. Ao criar o adaptador, o driver fornece informações de adaptador estático sobre o adaptador de exibição indireto.
Manipulando dispositivos multifuncionais
No caso mais simples, há um mapeamento um-para-um entre o objeto de dispositivo UMDF criado pelo subsistema plug and play para o dispositivo de exibição indireto anexado e o objeto IDDCX_ADAPTER que o driver de exibição indireto (IDD) cria.
Pode haver cenários mais complexos em que um único dongle de exibição indireto contém vários dispositivos plug and play. Por exemplo, uma solução de exibição indireta pode ter várias funções de dispositivo PnP, como um microfone (driver de áudio) e uma câmera (driver de vídeo). Nessas situações, é responsabilidade da IDD criar um único objeto IDDCX_ADAPTER para os vários objetos de dispositivo UMDF criados para cada dispositivo PnP. O driver precisa considerar o seguinte neste cenário:
- O IDDCX_ADAPTER só deve ser criado depois que todos os dispositivos PnP que compõem a solução de exibição indireta tiverem sido iniciados com êxito.
- O driver deve passar um único WDFDEVICE ao criar o adaptador, portanto, ele requer lógica para decidir qual dispositivo UMDF ele passará.
- Se qualquer um dos dispositivos que compõem o adaptador de vídeo indireto tiver um erro de hardware, o driver deverá relatar todos os dispositivos que compõem o adaptador como sendo um erro.
IDDCX_MONITOR
Esse objeto representa um monitor específico conectado a um dos conectores no adaptador de exibição indireto.
O driver cria o objeto monitor em um processo de dois estágios:
- Primeiro, ele chama o retorno de chamada IddCxMonitorCreate para criar o objeto IDDCX_MONITOR .
- Em seguida, ele chama o retorno de chamada IddCxMonitorArrival para concluir a chegada do monitor.
Quando um monitor é desconectado, o driver chama o retorno de chamada IddCxMonitorDeparture para relatar que o monitor foi desconectado, o que faz com que o objeto IDDCX_MONITOR seja destruído. Mesmo que o mesmo monitor seja desconectado e reconectado, a sequência IddCxMonitorDeparture/IddCxMonitorArrival precisará ser chamada novamente.
O IDDCX_MONITOR é um filho do objeto IDDCX_ADAPTER .
IDDCX_SWAPCHAIN
Esse objeto representa uma cadeia de troca que fornecerá imagens da área de trabalho a serem exibidas em um monitor conectado. A cadeia de troca tem vários buffers para permitir que o sistema operacional componha a próxima imagem da área de trabalho em um buffer enquanto a IDD está acessando outro buffer. O IDDCX_SWAPCHAIN é filho do IDDCX_MONITOR , portanto, haverá apenas uma troca atribuída a um determinado monitor a qualquer momento.
O sistema operacional cria e destrói os objetos IDDCX_SWAPCHAIN e os atribui/desatribui a monitores usando as chamadas EvtIddCxMonitorAssignSwapChain e EvtIddCxMonitorUnassignSwapChain Ddi.
IDDCX_OPMCTX
Esse objeto representa um contexto ativo do OPM ( Output Protection Manager ) de um único contexto OPM de aplicativo que o aplicativo pode usar para controlar a proteção de saída em um único monitor. Vários contextos OPM podem estar ativos em um determinado monitor ao mesmo tempo. O sistema operacional chama o driver para criar e destruir os contextos do OPM usando as chamadas DDI EvtIddCxMonitorOPMCreateProtectedOutput e EvtIddCxMonitorOPMDestroyProtectedOutput do driver.