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 enfileirado para execução quando um thread de trabalho do sistema recebe 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 por 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 for 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 IRQL PASSIVE_LEVEL. 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 de Contexto.
[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 rotina de.
Valor de retorno
Nenhum
Observações
ExInitializeWorkItem inicializa o item de trabalho com a rotina de retorno de chamada especificada e o ponteiro de contexto e ponteiros de lista de 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 no driverEntry para 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 dispositivo. Em todos os outros casos, os drivers devem usar IoAllocateWorkItem, IoFreeWorkIteme IoQueueWorkItem, pois somente essas rotinas garantem que o objeto do dispositivo associado ao item de trabalho especificado permaneça disponível até que o item de trabalho seja processado.
Requisitos
Requisito | Valor |
---|---|
da Plataforma de Destino | Área de trabalho |
cabeçalho | wdm.h (incluem FltKernel.h, Ntifs.h, Ntddk.h, Wdm.h) |
IRQL | Qualquer nível |