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.