Condividi tramite


Invio asincrono di richieste di I/O

Prima di poter inviare una richiesta di I/O in modo asincrono a una destinazione di I/O, è necessario formattare la richiesta. Nella tabella seguente sono elencati i metodi dell'oggetto di destinazione I/O che il driver può chiamare per formattare le richieste di I/O.

Metodo Scopo

WdfIoTargetFormatRequestForRead

Formatta una richiesta di lettura

WdfIoTargetFormatRequestForWrite

Formatta una richiesta di scrittura

WdfIoTargetFormatRequestForIoctl

Formatta una richiesta di controllo del dispositivo

WdfIoTargetFormatRequestForInternalIoctl

Formatta una richiesta di controllo del dispositivo interna

WdfIoTargetFormatRequestForInternalIoctlOthers

Formatta una richiesta di controllo del dispositivo interno non standard

Per inviare una richiesta di I/O in modo asincrono, il driver deve:

  1. Formattare la richiesta.

    Usare uno dei metodi elencati nella tabella precedente per formattare le richieste. Per informazioni dettagliate su come usare questi metodi, vedere le pagine di riferimento dei metodi.

  2. Registrare una funzione di callback CompletionRoutine .

    Se si inviano richieste in modo asincrono, in genere si vuole che il framework invii una notifica al driver quando un altro driver completa ogni richiesta. Il driver deve definire una funzione di callback CompletionRoutine e registrarla chiamando WdfRequestSetCompletionRoutine. Per altre informazioni, vedere Completamento delle richieste di I/O.

  3. Inviare la richiesta.

    Dopo che il driver formatta la richiesta e registra una funzione di callback CompletionRoutine , il driver deve chiamare WdfRequestSend. Questo metodo consente di inviare richieste in modo sincrono o asincrono, a seconda dei flag impostati nel parametro RequestOptions . Per un modo più semplice per inviare le richieste di I/O in modo sincrono, vedere Invio sincrono delle richieste di I/O. Per informazioni su come ottenere lo stato di completamento per una richiesta asincrona o per qualsiasi richiesta inviata chiamando WdfRequestSend, vedere Completamento delle richieste di I/O.

Un driver che chiama WdfRequestSend per inviare una richiesta di I/O può tentare di annullare la richiesta in un secondo momento. Per altre informazioni, vedere Annullamento delle richieste di I/O.

Alcuni driver potrebbero inviare una singola richiesta di I/O a più dispositivi e quindi a più destinazioni di I/O chiamando WdfRequestSend più volte per ogni richiesta. Questi driver devono chiamare WdfRequestChangeTarget prima di ogni chiamata a WdfRequestSend dopo il primo per verificare che la richiesta possa essere inviata alla destinazione di I/O successiva.