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

Confira também

ExFreePool

ExFreePoolWithTag

ExQueueWorkItem

IoAllocateWorkItem

IoFreeWorkItem

IoQueueWorkItem

WORK_QUEUE_ITEM