Usando o pool de dispositivos em drivers UMDF

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

Se o driver do UMDF (User-Mode Driver Framework) foi criado com a versão 1.11 ou 2.0 e está em execução em 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 pool de dispositivos. O main benefício do pool de dispositivos é o consumo de memória reduzido 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 em pool, 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 uma quando trinta minutos se passaram desde a última falha.

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

Para desabilitar o pool de dispositivos para um dispositivo específico, use a diretiva UmdfHostProcessSharing na seção DDInstall específica do WDF do INF. Para obter informações sobre UmdfHostProcessSharing, consulte Especificando diretivas do WDF em arquivos INF.

Se o driver usar E/S direta, você deverá definir UmdfHostProcessSharing como ProcessSharingDisabled. Caso contrário, o driver poderá falhar ao iniciar. Se WdfDeviceIoBufferedOrDirect estiver selecionado e o dispositivo estiver em pool, a estrutura alterará o método de acesso de buffer para E/S em buffer. Se WdfDeviceIoBufferedOrDirect estiver selecionado e o dispositivo não estiver em pool, a estrutura alterará o método de acesso de buffer para E/S direta.

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

Versões 1.9 e anteriores do UMDF

Se o driver tiver sido criado com UMDF versão 1.9 ou anterior, a estrutura criará uma instância separada do processo de host (Wudfhost) para cada pilha de dispositivos.

Se o dispositivo não for iniciado, a estrutura tentará reiniciá-lo até cinco vezes. A estrutura redefine a contagem de erros do dispositivo para uma quando trinta minutos se passaram desde a última falha.

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

Em um ambiente em pool, se várias pilhas de dispositivos compartilharem o mesmo driver de modo de usuário:

Como há apenas um objeto driver em uma configuração em pool, 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 por dispositivo em um objeto que não é compartilhado entre as pilhas de dispositivo, como o objeto de retorno de chamada do dispositivo do driver.