Compartilhar via


Gerenciando PDEVs

Este tópico se aplica somente ao Windows 2000 e posterior.

O número de threads que chamam um driver de exibição depende do número de PDEVs existentes em um dispositivo. Cada dispositivo tem no máximo um PDEV habilitado por saída do adaptador e um número ilimitado de PDEVs desabilitadas. Um PDEV está desabilitado ou habilitado chamando a função DrvAssertMode do driver. Quando um driver de exibição gerencia uma combinação de PDEVs desabilitados e habilitados, o sistema operacional permite que um único thread chame uma função de driver com um PDEV habilitado, permitindo simultaneamente que vários threads chamem funções de driver com PDEVs desabilitadas. Por exemplo, DrvBitBlt pode estar em execução no PDEV habilitado enquanto outro PDEV desabilitado está sendo destruído por DrvDisableSurface. Mesmo que um único driver de exibição gerencie vários PDEVs habilitados (por exemplo, em um cenário de vários monitores), o sistema operacional ainda permite apenas uma única chamada de thread no código do driver com qualquer um desses PDEVs habilitados.

Se o driver de exibição precisar gerenciar todos os recursos globais e estados de hardware compartilhados entre PDEVs, o driver de exibição também deverá lidar com qualquer sincronização necessária. O driver de exibição é mapeado para o espaço de sessão, portanto, cada sessão tem seu próprio conjunto de variáveis globais. Portanto, você não deve usar uma variável global do driver de exibição para manter um objeto de sincronização, como um mutex. Em vez disso, armazene o mutex na extensão do dispositivo do driver de miniporto de vídeo, que é mapeado para espaço global e não espaço de sessão. Você pode inicializar o mutex na função HwVidInitialize do driver de miniporto de vídeo. Em seguida, a função DrvEnablePDEV do driver de exibição pode obter um ponteiro para o mutex enviando um IOCTL personalizado para o driver de miniporto de vídeo. Os threads de driver de exibição que pertencem a sessões diferentes terão cópias separadas do ponteiro, mas todas essas cópias apontarão para o mesmo objeto mutex.

O driver de exibição não tem permissão para chamar diretamente as rotinas de kernel que adquirem e liberam um mutex, portanto, o driver de exibição deve contar com o driver de miniporto de vídeo para executar essas tarefas. O driver de miniporto de vídeo poderia implementar uma função que adquire e libera o mutex, e o driver de exibição poderia obter um ponteiro para essa função no mesmo IOCTL personalizado que ele usa para obter um ponteiro para o próprio mutex.

Somente o seguinte número limitado de funções de driver pode ser chamado com um PDEV desabilitado: