Condividi tramite


Funzione WdfRequestRetrieveInputWdmMdl (wdfrequest.h)

[Si applica solo a KMDF]

Il metodo WdfRequestRetrieveInputWdmMdl recupera un elenco di descrittori di memoria (MDL) che rappresenta il buffer di input della richiesta di I/O.

Sintassi

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

Parametri

[in] Request

Handle per un oggetto richiesta framework.

[out] Mdl

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

Valore restituito

WdfRequestRetrieveInputWdmMdl 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 usa né buffering né I/O diretto. Per altre informazioni sui metodi supportati per l'accesso ai buffer dei dati, vedere la sezione Osservazioni seguenti.
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 restituire anche altri valori NTSTATUS.

Un controllo di bug si verifica se il driver fornisce un handle di oggetti non valido.

Commenti

Il buffer di input di una richiesta contiene informazioni, ad esempio i dati da scrivere in un disco, forniti dall'origine della richiesta. Il driver può chiamare WdfRequestRetrieveInputWdmMdl per una richiesta di scrittura o una richiesta di controllo I/O del dispositivo, ma non per una richiesta di lettura (perché le richieste di lettura non forniscono dati di input).

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

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

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

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

Esempio

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

VOID 
MyDrvEvtIoWrite(
    IN WDFQUEUE  Queue,
    IN WDFREQUEST  Request,
    IN size_t  Length
    )
{
    NTSTATUS  status;
    PMDL  mdl = NULL;

...
    status = WdfRequestRetrieveInputWdmMdl(
                                           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 Framework Library Versioning).
IRQL <=DISPATCH_LEVEL
Regole di conformità DDI DriverCreate(kmdf), InputBufferAPI(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), MdlAfterReqCompletedIntIoctl(kmdf), MdlAfterReqCompletedIntIoctlA(kmdf), MdlAfterReqCompletedIoctl(kmdf), MdlAfterReqCompletedIoctlA(kmdf), MdlAfterReqCompletedRead(kmdf), MdlAfterReqCompletedWrite(kmdf) , MdlAfterReqCompletedWriteA(kmdf)

Vedi anche

WdfRequestRetrieveOutputWdmMdl