Funzione ExInitializeWorkItem (wdm.h)

ExInitializeWorkItem inizializza un elemento della coda di lavoro con un contesto fornito dal chiamante e una routine di callback da accodare per l'esecuzione quando viene assegnato un thread di lavoro di sistema.

Avviso

Usare questa routine con estrema cautela. Vedere la sezione Osservazioni di seguito.

Sintassi

void ExInitializeWorkItem(
  [in] PWORK_QUEUE_ITEM       Item,
  [in] PWORKER_THREAD_ROUTINE Routine,
  [in] PVOID                  Context
);

Parametri

[in] Item

Puntatore a una struttura WORK_QUEUE_ITEM allocata dal chiamante da inizializzare. Questa struttura deve essere allocata dal pool non a pagina. La routine di callback specificata nel parametro Routine è responsabile della liberazione di questo elemento di lavoro quando non è più necessaria chiamando ExFreePool o ExFreePoolWithTag.

[in] Routine

Puntatore a una routine definita dal chiamante che verrà chiamata per elaborare l'elemento di lavoro. Questa routine verrà chiamata nel contesto di un thread di sistema in IRQL PASSIVE_LEVEL. Questa routine viene dichiarata come segue:

VOID
(*PWORKER_THREAD_ROUTINE)(
    IN PVOID Parameter
    );

Parametro

Puntatore alle informazioni di contesto passato nel parametro Context .

[in] Context

Puntatore a informazioni di contesto fornite dal chiamante da passare alla routine di callback specificata nel parametro Routine .

Valore restituito

nessuno

Osservazioni

ExInitializeWorkItem inizializza l'elemento di lavoro con la routine di callback e i puntatori di contesto e i puntatori di elenco NULL specificati.

Per aggiungere l'elemento di lavoro a una coda di lavoro di sistema, chiamare ExQueueWorkItem.

Gli elementi di lavoro sono una risorsa limitata e i driver devono allocarli solo in base alle esigenze. Ad esempio, non allocare un elemento di lavoro in DriverEntry per l'uso dedicato del driver.

ExInitializeWorkItem e ExQueueWorkItem possono essere usati solo nei casi in cui l'elemento di lavoro specificato non è associato a alcun oggetto dispositivo o stack di dispositivi. In tutti gli altri casi, i driver devono usare IoAllocateWorkItem, IoFreeWorkItem e IoQueueWorkItem, perché solo queste routine garantiscono che l'oggetto dispositivo associato all'elemento di lavoro specificato rimanga disponibile fino a quando l'elemento di lavoro non è stato elaborato.

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione wdm.h (include FltKernel.h, Ntifs.h, Ntddk.h, Wdm.h)
IRQL Qualsiasi livello

Vedi anche

ExFreePool

ExFreePoolWithTag

ExQueueWorkItem

IoAllocateWorkItem

IoFreeWorkItem

IoQueueWorkItem

WORK_QUEUE_ITEM