Partilhar via


Especificando um modo de sincronização de callback

Advertência

UMDF 2 é a versão mais recente do UMDF e substitui UMDF 1. Todos os novos drivers UMDF devem ser escritos 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 UMDF 2.

Os exemplos de UMDF 1 arquivados podem ser encontrados na Windows 11, versão 22H2 - Atualização de Amostras de Driver de maio de 2022.

Para obter mais informações, consulte Introdução ao UMDF.

O driver pode especificar como as suas funções de retorno de chamada são chamadas pelo framework. 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 o método IDriverEntry::OnDeviceAdd é chamado para adicionar o dispositivo ao sistema.

O condutor pode especificar um dos seguintes valores da 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 de quanto paralelismo o dispositivo de hardware pode explorar e quanto o driver pode suportar.

Valor Significado

Nenhum (0)

Indica que quaisquer funções de callback no driver não estão sincronizadas.

WdfDeviceLevel (1)

Indica que todas as funções de callback de fila no driver estão sincronizadas.

Observação 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 aplicam-se apenas às funções de retorno de chamada em fila e não às funções de retorno de chamada Plug and Play (PnP) e de gestão de energia. As funções de retorno de chamada em fila incluem o seguinte:

As funções de retorno de chamada de conclusão de pedido (IRequestCallbackRequestCompletion::OnCompletion) não são funções de retorno de chamada em fila. Portanto, eles não são sincronizados.