Prevenindo um desequilíbrio de notificações de criação e fechamento para um driver
Aviso
O UMDF 2 é a versão mais recente do UMDF e substitui o UMDF 1. Todos os novos drivers UMDF devem ser gravados usando UMDF 2. Nenhum novo recurso está sendo adicionado ao UMDF 1 e há suporte limitado para UMDF 1 em versões mais recentes do Windows 10. Os drivers universais do Windows devem usar o UMDF 2.
Os exemplos de UMDF 1 arquivados podem ser encontrados no Windows 11, versão 22H2 – Atualização de exemplos de driver de maio de 2022.
Para obter mais informações, consulte Introdução com UMDF.
Um driver UMDF superior pode usar o método IWDFDeviceInitialize::AutoForwardCreateCleanupClose para controlar quando a estrutura encaminha automaticamente as notificações create-file, cleanup-file e close-file para o próximo driver inferior na pilha do dispositivo. No entanto, como o driver superior define AutoForwardCreateCleanupClose para encaminhar automaticamente somente em um nível de dispositivo e não em um nível por arquivo, o encaminhamento deve ser o mesmo para todos os arquivos de um dispositivo. A estrutura garante esse comportamento de encaminhamento para notificações de arquivo de limpeza e arquivo próximo. Se o driver superior implementar a função de retorno de chamada IQueueCallbackCreate::OnCreateFile , ele deverá garantir que seu comportamento de encaminhamento seja o mesmo para todas as solicitações de arquivo de criação e seja consistente com o comportamento de encaminhamento para notificações de arquivo de limpeza e arquivo próximo. Não fazer isso pode fazer com que drivers inferiores recebam uma quantidade desigual de chamadas para os métodos IQueueCallbackCreate::OnCreateFile e IFileCallbackCleanup::OnCleanupFile e IFileCallbackClose::OnCloseFile .
Para impedir que drivers inferiores recebam uma quantidade desigual de notificações de arquivo de criação e arquivo próximo, o driver superior deve garantir, em sua função de retorno de chamada IQueueCallbackCreate::OnCreateFile , que:
Seu comportamento de encaminhamento é o mesmo para todos os arquivos de um dispositivo.
Seu comportamento de encaminhamento é consistente com a forma como ele define o parâmetro de sinalizador de IWDFDeviceInitialize::AutoForwardCreateCleanupClose. Ou seja:
- Se o driver definir o sinalizador como WdfTrue, o driver deverá encaminhar todas as solicitações create-file para baixo na pilha do dispositivo.
- Se o driver definir o sinalizador como WdfFalse, o driver não deverá encaminhar nenhuma das solicitações create-file na pilha.
- Se o driver definir o sinalizador como WdfUseDefault e:
- Se o driver for um driver de função, ele não deverá encaminhar nenhuma solicitação create-file para baixo na pilha.
- Se o driver for um driver de filtro, ele deverá encaminhar todas as solicitações de arquivo de criação para baixo na pilha.
Em situações em que o driver não pode encaminhar uma solicitação create-file, o driver ainda pode gerar uma nova solicitação create-file para drivers inferiores chamando o método IWDFDevice::CreateWdfFile para criar um novo arquivo WDF. Em seguida, o driver pode concluir a solicitação de arquivo de criação original com base nos resultados da solicitação create-file recém-gerada (ou seja, dos resultados de CreateWdfFile).