Especificando um modo de sincronização de retorno de chamada
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. Drivers universais do Windows devem usar UMDF 2.
Os exemplos 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.
O driver pode especificar como suas funções de retorno de chamada são chamadas pela estrutura. O driver especifica um modo de sincronização (ou bloqueio) para um dispositivo antes de chamar o método IWDFDriver::CreateDevice para criar um objeto de dispositivo para o dispositivo. Para especificar o modo de sincronização, o driver deve chamar o método IWDFDeviceInitialize::SetLockingConstraint . O driver recebe um ponteiro para a interface IWDFDeviceInitialize quando seu método IDriverEntry::OnDeviceAdd é chamado para adicionar o dispositivo ao sistema.
O driver pode especificar um dos seguintes valores do tipo de enumeração WDF_CALLBACK_CONSTRAINT no parâmetro LockType de IWDFDeviceInitialize::SetLockingConstraint para identificar o modo de bloqueio. O tipo de restrição (ou bloqueio) especificado depende da quantidade de paralelismo que o dispositivo de hardware pode explorar e o quanto o driver pode lidar.
Valor | Significado |
---|---|
Nenhum (0) |
Indica que nenhuma função de retorno de chamada no driver é sincronizada. |
WdfDeviceLevel (1) |
Indica que todas as funções de retorno de chamada de fila no driver são sincronizadas. |
Nota Se o driver não chamar IWDFDeviceInitialize::SetLockingConstraint para especificar um valor, a estrutura definirá o valor padrão dessa propriedade como WdfDeviceLevel.
As restrições se aplicam apenas a funções de retorno de chamada de fila e não a funções de retorno de chamada de Plug and Play (PnP) e de gerenciamento de energia. As funções de retorno de chamada de fila incluem o seguinte:
Funções de retorno de chamada de expedição automática, como IQueueCallbackRead::OnRead e IQueueCallbackWrite::OnWrite. Para obter mais informações, consulte Funções de retorno de chamada de evento de fila de E/S.
Funções de retorno de chamada de alteração de estado da fila, como IQueueCallbackStateChange::OnStateChange.
Solicitar funções de retorno de chamada de cancelamento, como IRequestCallbackCancel::OnCancel.
Limpeza de arquivo e fechar funções de retorno de chamada, como IFileCallbackCleanup::OnCleanupFile e IFileCallbackClose::OnCloseFile.
As funções de retorno de chamada de conclusão de solicitação (IRequestCallbackRequestCompletion::OnCompletion) não são funções de retorno de chamada de fila. Portanto, eles não são sincronizados.