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 |