Função ExInitializeWorkItem (wdm.h)
ExInitializeWorkItem inicializa um item de fila de trabalho com um contexto fornecido pelo chamador e uma rotina de retorno de chamada a ser enfileirada para execução quando um thread de trabalho do sistema recebe o controle.
Aviso
Use essa rotina com extrema cautela. Consulte a seção Comentários abaixo.
Sintaxe
void ExInitializeWorkItem(
[in] PWORK_QUEUE_ITEM Item,
[in] PWORKER_THREAD_ROUTINE Routine,
[in] PVOID Context
);
Parâmetros
[in] Item
Ponteiro para uma estrutura de WORK_QUEUE_ITEM alocada pelo chamador a ser inicializada. Essa estrutura deve ser alocada do pool nãopagado. A rotina de retorno de chamada especificada no parâmetro Routine é responsável por liberar esse item de trabalho quando ele não é mais necessário chamando ExFreePool ou ExFreePoolWithTag.
[in] Routine
Ponteiro para uma rotina definida pelo chamador que será chamada para processar o item de trabalho. Essa rotina será chamada no contexto de um thread do sistema no PASSIVE_LEVEL IRQL. Essa rotina é declarada da seguinte maneira:
VOID
(*PWORKER_THREAD_ROUTINE)(
IN PVOID Parameter
);
Parâmetro
Ponteiro de informações de contexto que foi passado no parâmetro Context .
[in] Context
Ponteiro para informações de contexto fornecidas pelo chamador a serem passadas para a rotina de retorno de chamada especificada no parâmetro Routine .
Retornar valor
Nenhum
Comentários
ExInitializeWorkItem inicializa o item de trabalho com a rotina de retorno de chamada e o ponteiro de contexto especificados e ponteiros de lista NULL .
Para adicionar o item de trabalho a uma fila de trabalho do sistema, chame ExQueueWorkItem.
Os itens de trabalho são um recurso limitado e os drivers só devem alocá-los conforme necessário. Por exemplo, não aloque um item de trabalho em DriverEntry para o uso dedicado do driver.
ExInitializeWorkItem e ExQueueWorkItem só podem ser usados em casos em que o item de trabalho especificado não está associado a nenhum objeto de dispositivo ou pilha de dispositivos. Em todos os outros casos, os drivers devem usar IoAllocateWorkItem, IoFreeWorkItem e IoQueueWorkItem, pois apenas essas rotinas garantem que o objeto de dispositivo associado ao item de trabalho especificado permaneça disponível até que o item de trabalho seja processado.
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Área de Trabalho |
Cabeçalho | wdm.h (incluem FltKernel.h, Ntifs.h, Ntddk.h, Wdm.h) |
IRQL | Qualquer nível |