Condividi tramite


Funzione WdfRequestRetrieveOutputWdmMdl (wdfrequest.h)

[Si applica solo a KMDF]

Il metodo WdfRequestRetrieveOutputWdmMdl recupera un elenco di descrittori di memoria (MDL) che rappresenta il buffer di output di una richiesta di I/O.

Sintassi

NTSTATUS WdfRequestRetrieveOutputWdmMdl(
  [in]  WDFREQUEST Request,
  [out] PMDL       *Mdl
);

Parametri

[in] Request

Handle per un oggetto richiesta del framework.

[out] Mdl

Puntatore a una posizione che riceve un puntatore a un MDL.

Valore restituito

WdfRequestRetrieveOutputWdmMdl restituisce STATUS_SUCCESS se l'operazione ha esito positivo. In caso contrario, questo metodo potrebbe restituire uno dei valori seguenti:

Codice restituito Descrizione
STATUS_INVALID_PARAMETER
Un parametro di input non è valido.
STATUS_INVALID_DEVICE_REQUEST
Il tipo di richiesta non è valido o la richiesta non usa né il buffering né l'I/O diretto. Per altre informazioni sui metodi supportati per l'accesso ai buffer di dati, vedere la sezione Osservazioni seguente.
STATUS_INTERNAL_ERROR
La richiesta è già stata completata.
STATUS_BUFFER_TOO_SMALL
La lunghezza del buffer di input è zero.
STATUS_INSUFFICIENT_RESOURCES
Memoria insufficiente.
 

Questo metodo potrebbe anche restituire altri valori NTSTATUS.

Se il driver fornisce un handle di oggetto non valido, si verifica un controllo di bug.

Commenti

Il buffer di output di una richiesta riceve informazioni, ad esempio dati da un disco, che il driver fornisce all'origine della richiesta. Il driver può chiamare WdfRequestRetrieveOutputWdmMdl per una richiesta di lettura o una richiesta di controllo di I/O del dispositivo, ma non per una richiesta di scrittura (perché le richieste di scrittura non forniscono dati di output).

Il metodo WdfRequestRetrieveOutputWdmMdl recupera l'MDL del buffer di output per le richieste di I/O che usano il metodo di I/O memorizzato nel buffer o il metodo di I/Odiretto per l'accesso ai buffer di dati. Se il codice di controllo di I/O della richiesta è IRP_MJ_INTERNAL_DEVICE_CONTROL o se la richiesta proviene da un altro driver in modalità kernel, WdfRequestRetrieveOutputWdmMdl supporta anche le richieste di I/O che usano né I/O memorizzate nel buffer né diretto.

Se WdfRequestRetrieveOutputWdmMdl restituisce STATUS_SUCCESS, il driver riceve un puntatore a un MDL che descrive il buffer di output.

Il driver non deve accedere al file MDL di una richiesta dopo aver completato la richiesta di I/O.

Per altre informazioni su WdfRequestRetrieveOutputWdmMdl, vedere Accesso ai buffer di dati nei driver Framework-Based.

Esempio

L'esempio di codice seguente fa parte di una funzione di callback EvtIoRead che ottiene un MDL per il buffer di input di una richiesta di I/O. Se la chiamata a WdfRequestRetrieveOutputWdmMdl ha esito negativo, il driver completa la richiesta con lo stato di errore restituito da WdfRequestRetrieveOutputWdmMdl .

VOID 
MyDrvEvtIoRead(
    IN WDFQUEUE  Queue,
    IN WDFREQUEST  Request,
    IN size_t  Length
    )
{
    NTSTATUS  status;
    PMDL  mdl = NULL;
...
    status = WdfRequestRetrieveOutputWdmMdl(
                                            Request,
                                            &mdl
                                            );
    if (!NT_SUCCESS(status))
    {
        WdfRequestCompleteWithInformation(
                                          Request,
                                          status,
                                          0
                                          );
    }
...
}

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Versione KMDF minima 1.0
Intestazione wdfrequest.h (include Wdf.h)
Libreria Wdf01000.sys (vedere Controllo delle versioni della libreria framework).
IRQL <=DISPATCH_LEVEL
Regole di conformità DDI DriverCreate(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), MdlAfterReqCompletedIntIoctl(kmdf), MdlAfterReqCompletedIntIoctlA(kmdf), MdlAfterReqCompletedIoctl(kmdf), MdlAfterReqCompletedIoctlA(kmdf), MdlAfterReqCompletedRead(kmdf), MdlAfterReqCompletedReadA(kmdf), MdlAfterReqCompletedWrite(kmdf), OutputBufferAPI(kmdf)

Vedi anche

WdfRequestRetrieveInputWdmMdl