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:

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.