DRIVER_LIST_CONTROL funzione di callback (wdm.h)
La routine AdapterListControl avvia un'operazione di dispersione/raccolta di accesso diretto alla memoria.
Sintassi
DRIVER_LIST_CONTROL DriverListControl;
void DriverListControl(
[in] _DEVICE_OBJECT *DeviceObject,
[in] _IRP *Irp,
[in] PSCATTER_GATHER_LIST ScatterGather,
[in] PVOID Context
)
{...}
Parametri
[in] DeviceObject
Puntatore fornito dal chiamante a una struttura DEVICE_OBJECT . Si tratta dell'oggetto dispositivo per il dispositivo di destinazione, creato in precedenza dalla routine AddDevice del driver.
[in] Irp
Puntatore fornito dal chiamante a una struttura IRP che descrive l'operazione di I/O, se il driver ha una routine StartIo . In caso contrario, non usato.
[in] ScatterGather
Puntatore fornito dal chiamante a una struttura SCATTER_GATHER_LIST che descrive aree di dispersione/raccolta.
[in] Context
Puntatore fornito dal chiamante alle informazioni di contesto definite dal driver, specificate in una chiamata precedente a AllocateAdapterChannel.
Valore restituito
nessuno
Osservazioni
Per registrare una routine AdapterListControl per un oggetto dispositivo specifico, un driver deve chiamare IoGetDmaAdapter per ottenere un oggetto adapter, quindi chiamare GetScatterGatherList per richiedere l'uso dell'adapter e fornire l'indirizzo della routine AdapterListControl . Quando l'adattatore è libero, il sistema chiama la routine AdapterListControl .
Esempio
Per definire una routine di callback AdapterListControl , è prima necessario specificare 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 usando i tipi di funzione callback consente l'analisi del codice per i driver, il verifica driver statico (SDV) e altri strumenti di verifica trovano errori ed è un requisito per la scrittura di driver per il sistema operativo Windows.
Ad esempio, per definire una routine di callback AdapterListControl denominata MyAdapterListControl
, usare il tipo di DRIVER_LIST_CONTROL, come illustrato nell'esempio di codice seguente:
DRIVER_LIST_CONTROL MyAdapterListControl;
Implementare quindi la routine di callback come indicato di seguito:
_Use_decl_annotations_
VOID
MyAdapterListControl(
struct _DEVICE_OBJECT *DeviceObject,
struct _IRP *Irp,
PSCATTER_GATHER_LIST ScatterGather,
PVOID Context
)
{
// Function body
}
Il tipo di funzione DRIVER_LIST_CONTROL è 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 usate le annotazioni applicate al tipo di funzione DRIVER_LIST_CONTROL nel file di intestazione. Per altre informazioni sui requisiti per le dichiarazioni di funzione, vedere Dichiarazione di funzioni tramite tipi di ruolo per i driver WDM. Per informazioni su _Use_decl_annotations_
, vedere Annotazione del comportamento della funzione.
Per informazioni dettagliate sull'implementazione di una routine AdapterListControl , vedere Uso di DMA A dispersione/raccolta.
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Desktop |
Intestazione | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | Chiamato in DISPATCH_LEVEL. |