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:

  1. 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.

  2. 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.

  3. 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:

  1. Obtém informações fornecidas pelo driver sobre o item de trabalho acessando a memória de contexto do objeto de item de trabalho.
  2. 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.
  3. 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.