Partilhar via


Usando a agregação de dispositivos nos drivers UMDF

User-Mode Driver Framework (UMDF) versões 1.11 e 2.0

Se o driver do User-Mode Driver Framework (UMDF) foi criado com a versão 1.11 ou 2.0 e está sendo executado no Windows 8 ou posterior, a estrutura cria uma única instância do Wudfhost que pode hospedar várias pilhas de dispositivos. Essa técnica é chamada de agregação de dispositivos. O principal benefício do pool de dispositivos é a redução do consumo de memória em um ambiente com vários dispositivos UMDF.

Se um dispositivo em pool falhar, a estrutura encerrará a instância do Wudfhost e tentará reiniciar todos os dispositivos que estavam anteriormente no pool. Se o dispositivo falhar novamente enquanto estiver agrupado, a estrutura criará um processo Wudfhost separado para o dispositivo e tentará iniciar o dispositivo novamente.

Se o dispositivo falhar no processo de host separado, a estrutura tentará reiniciá-lo até cinco vezes. A estrutura redefine a contagem de erros do dispositivo para um quando trinta minutos tiverem decorrido desde a última falha.

Se o sistema for reinicializado, a estrutura reagrupará dispositivos, exceto aqueles que falharam durante a execução em um processo separado.

Para desativar o agrupamento de dispositivos para um dispositivo específico, use a diretiva UmdfHostProcessSharing na seção DDInstall específica do WDF no INF. Para obter informações sobre UmdfHostProcessSharing, consulte Especificar Diretivas WDF em Ficheiros INF.

Se o teu driver usar I/O direto , deves definir UmdfHostProcessSharing como ProcessSharingDisabled . Caso contrário, o driver pode falhar em iniciar. Se WdfDeviceIoBufferedOrDirect estiver selecionado e o dispositivo estiver agrupado, o framework alterará o método de acesso ao buffer para E/S de buffer. Se WdfDeviceIoBufferedOrDirect estiver selecionado e o dispositivo não estiver agrupado, o framework alterará o método de acesso ao buffer para E/S direta.

Para selecionar um método de acesso a buffer, o seu driver deve chamar o método IWDFDeviceInitialize2::SetIoTypePreference a partir da sua função de retorno de chamada IDriverEntry::OnDeviceAdd. Para obter informações sobre métodos de acesso, consulte Aceder a buffers de dados em drivers UMDF-Based.

UMDF versões 1.9 e anteriores

Se o driver foi criado com UMDF versão 1.9 ou anterior, o framework cria uma instância separada do processo de host (Wudfhost) para cada pilha de dispositivos.

Se o dispositivo falhar ao iniciar, a estrutura tentará reiniciá-lo até cinco vezes. A estrutura redefine a contagem de erros do dispositivo para um quando trinta minutos tiverem decorrido desde a última falha.

Em um ambiente não agrupado, se várias pilhas de dispositivos compartilharem o mesmo driver UMDF:

  • Cada pilha de dispositivos é carregada num processo WudfHost separado.
  • O framework chama os métodos IDriverEntry::OnInitialize e IDriverEntry::OnDeinitialize do driver uma vez para cada pilha de dispositivos.
  • A estrutura chama o método IDriverEntry::OnDeviceAdd do driver uma vez para cada pilha de dispositivos. Cada objeto de dispositivo está associado a um objeto de driver separado.

Num ambiente partilhado, se várias pilhas de dispositivos partilharem o mesmo driver em modo de utilizador:

  • Cada pilha de dispositivos é carregada no mesmo processo WudfHost.
  • A estrutura chama os métodos IDriverEntry::OnInitialize e IDriverEntry::OnDeinitialize do driver apenas uma vez.
  • A estrutura chama o método do driver IDriverEntry::OnDeviceAdd uma vez para cada pilha de dispositivos. Cada objeto de dispositivo está associado ao mesmo objeto de driver.

Como há apenas um objeto de driver em uma configuração agrupada, o driver não deve armazenar nenhum contexto por dispositivo em variáveis globais ou em objetos compartilhados entre os dispositivos, como o objeto de retorno de chamada do driver. Em vez disso, o driver deve armazenar o contexto de cada dispositivo em um objeto que não é partilhado nas várias pilhas de dispositivos, como o objeto de retorno de chamada do dispositivo do driver.