Usando itens de trabalho
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.
Um item de trabalho é uma tarefa que um driver executa em uma função de retorno de chamada de evento OnWorkItem . Essas funções são executadas de forma assíncrona.
Os drivers UMDF normalmente usam itens de trabalho se um OnInterruptIsr precisar executar processamento adicional sem atrasar a execução da ISR (solicitação de serviço de interrupção) porque a linha de interrupção pode ser compartilhada por vários dispositivos.
Normalmente, a função de retorno de chamada OnInterruptIsr de um driver cria um objeto de item de trabalho e o adiciona à fila de itens de trabalho do sistema. Posteriormente, um thread de threadpool desativa o objeto e chama a função de retorno de chamada OnWorkItem do item de trabalho.
Configurando um item de trabalho
Para configurar um item de trabalho, o driver deve:
Crie o item de trabalho.
Seu driver chama IWDFDevice3::CreateWorkItem para criar um objeto de item de trabalho e identificar uma função de retorno de chamada OnWorkItem que processará o item de trabalho.
Armazene informações sobre o item de trabalho.
Normalmente, os drivers usam a memória de contexto do objeto de item de trabalho para armazenar informações sobre a tarefa que a função de retorno de chamada OnWorkItem deve executar. Quando a função de retorno de chamada OnWorkItem é chamada, ela pode recuperar as informações acessando essa memória de contexto. Para obter informações sobre como alocar e acessar a memória de contexto, consulteIWDFObject::AssignContext.
Adicione o item de trabalho à fila de itens de trabalho do sistema.
Seu driver chama IWDFWorkItem::Enqueue, que adiciona o item de trabalho do driver à fila de itens de trabalho.
Quando o driver chama IWDFDevice3::CreateWorkItem, ele pode, opcionalmente, fornecer um objeto pai (por exemplo, um objeto de dispositivo ou um objeto de fila). Quando o sistema exclui esse objeto, ele também exclui todos os itens de trabalho existentes associados ao objeto .
Usando a função de retorno de chamada WorkItem
Depois que o item de trabalho tiver sido adicionado à fila de itens de trabalho, ele permanecerá na fila até que um thread de trabalho do sistema fique disponível. O thread de trabalho do sistema remove o item de trabalho da fila e, em seguida, chama a função de retorno de chamada OnWorkItem do driver, passando o objeto de item de trabalho como entrada.
Normalmente, a função de retorno de chamada OnWorkItem executa as seguintes etapas:
- Obtém informações fornecidas pelo driver sobre o item de trabalho acessando a memória de contexto do objeto de item de trabalho.
- Executa a tarefa especificada. Se necessário, a função de retorno de chamada pode chamar IWDFWorkItem::GetParentObject para determinar o objeto pai do item de trabalho.
- Se o driver enviar novamente o item de trabalho, indicará que o identificador para o item de trabalho agora está disponível para reutilização.
Alguns drivers podem precisar chamar IWDFWorkItem::Flush para liberar seus itens de trabalho da fila do item de trabalho. Se um driver chamar o método Flush , o método não retornará até que um thread de trabalho tenha removido o item de trabalho especificado da fila de itens de trabalho e chamado de função de retorno de chamada OnWorkItem do driver, e a função de retorno de chamada OnWorkItem tenha retornado posteriormente após o processamento do item de trabalho.