IO_WORKITEM_ROUTINE funzione di callback (wdm.h)
Una routine WorkItem esegue l'elaborazione di un elemento di lavoro accodato dalla routine IoQueueWorkItem .
Sintassi
IO_WORKITEM_ROUTINE IoWorkitemRoutine;
void IoWorkitemRoutine(
[in] PDEVICE_OBJECT DeviceObject,
[in, optional] PVOID Context
)
{...}
Parametri
[in] DeviceObject
Puntatore a uno degli oggetti dispositivo del chiamante. Si tratta del puntatore passato come parametro DeviceObject a IoAllocateWorkItem quando l'elemento di lavoro è stato allocato o come parametro IoObject a IoInitializeWorkItem quando l'elemento di lavoro è stato inizializzato.
[in, optional] Context
Specifica le informazioni sul contesto specifiche del driver. Si tratta del valore passato come parametro Context a IoQueueWorkItem quando l'elemento di lavoro è stato accodato.
Valore restituito
nessuno
Osservazioni
Il driver accoda una routine WorkItem chiamando IoQueueWorkItem e un thread di lavoro di sistema esegue successivamente la routine. Una routine WorkItem deve essere eseguita per un periodo di tempo limitato; in caso contrario, il sistema può deadlock. Per altre informazioni, vedere Thread di lavoro di sistema.
Una routine WorkItem viene eseguita in IRQL = PASSIVE_LEVEL e in un contesto di thread di sistema.
Esempio
Per definire una routine di callback WorkItem , è innanzitutto necessario fornire una dichiarazione di funzione che identifica il tipo di routine di callback che si sta definendo. Windows fornisce un set di tipi di funzione di callback per i driver. La dichiarazione di una funzione tramite i tipi di funzione di callback consente di analizzare il codice per i driver, l'SDV ( Static Driver Verifier ) e altri strumenti di verifica di trovare errori ed è un requisito per la scrittura di driver per il sistema operativo Windows.
Ad esempio, per definire una routine di callback WorkItem denominata MyWorkItem
, usare il tipo di IO_WORKITEM_ROUTINE come illustrato nell'esempio di codice seguente:
IO_WORKITEM_ROUTINE MyWorkItem;
Implementare quindi la routine di callback come indicato di seguito:
_Use_decl_annotations_
VOID
MyWorkItem(
PDEVICE_OBJECT DeviceObject,
PVOID Context
)
{
// Function body
}
Il tipo di funzione IO_WORKITEM_ROUTINE è definito nel file di intestazione Wdm.h. Per identificare in modo più accurato gli errori quando si eseguono gli strumenti di analisi del codice, assicurarsi di aggiungere l'annotazione _Use_decl_annotations_
alla definizione della funzione. L'annotazione _Use_decl_annotations_
garantisce che vengano utilizzate le annotazioni applicate al tipo di funzione IO_WORKITEM_ROUTINE nel file di intestazione. Per altre informazioni sui requisiti per le dichiarazioni di funzione, vedere Dichiarazione di funzioni tramite tipi di ruolo di funzione per i driver WDM. Per informazioni su _Use_decl_annotations_
, vedere Annotazione del comportamento della funzione.
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Desktop |
Intestazione | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | Chiamato a PASSIVE_LEVEL. |