Partilhar via


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

Consulte também

ExFreePool

ExFreePoolWithTag

ExQueueWorkItem

IoAllocateWorkItem

IoFreeWorkItem

IoQueueWorkItem

WORK_QUEUE_ITEM