Funzione WdfRequestCreateFromIrp (wdfrequest.h)
[Si applica solo a KMDF]
Il metodo WdfRequestCreateFromIrp crea un oggetto richiesta framework da un oggetto WDM IRP specificato.
Sintassi
NTSTATUS WdfRequestCreateFromIrp(
[in, optional] PWDF_OBJECT_ATTRIBUTES RequestAttributes,
[in] PIRP Irp,
[in] BOOLEAN RequestFreesIrp,
[out] WDFREQUEST *Request
);
Parametri
[in, optional] RequestAttributes
Puntatore a una struttura di WDF_OBJECT_ATTRIBUTES allocata dal chiamante che specifica gli attributi dell'oggetto richiesta. Questo parametro è facoltativo e può essere WDF_NO_OBJECT_ATTRIBUTES.
[in] Irp
Puntatore a una struttura IRP contenente un pacchetto di richiesta di I/O WDM.
[in] RequestFreesIrp
Valore booleano che, se TRUE, indica che il framework rimuove l'IRP quando l'handle di richiesta viene eliminato. Se FALSE, il driver deve chiamare IoFreeIrp per rimuovere l'IRP , usando la procedura illustrata nella sezione Esempi seguenti.
[out] Request
Puntatore a una posizione che riceve un handle a un oggetto richiesta framework.
Valore restituito
WdfRequestCreateFromIrp restituisce STATUS_SUCCESS se l'operazione ha esito positivo. Per un elenco di valori restituiti aggiuntivi, vedere Errori di creazione di oggetti Framework.
Questo metodo potrebbe restituire anche altri valori NTSTATUS.
Commenti
In genere, i driver basati su framework chiamano WdfRequestCreateFromIrp solo se ricevono IRP WDM in una routine di invio WDM e quindi inoltrano le richieste alle destinazioni di I/O del framework.
Se un driver chiama WdfRequestCreateFromIrp per creare un oggetto request, non deve chiamare WdfRequestComplete per l'oggetto request. Il driver deve invece chiamare WdfObjectDelete al termine dell'uso dell'oggetto request.
Inoltre, il driver non deve chiamare WdfRequestRetrieveOutputMemory, WdfRequestRetrieveOutputBuffer, WdfRequestRetrieveInputBuffer o WdfRequestRetrieveInputMemory con il nuovo oggetto request.
Per impostazione predefinita, il padre del nuovo oggetto request è l'oggetto driver del framework creato dal metodo WdfDriverCreate . È possibile usare il membro ParentObject della struttura WDF_OBJECT_ATTRIBUTES per specificare un elemento padre diverso. Il framework elimina l'oggetto request quando elimina l'oggetto padre. Se il driver non modifica l'elemento padre predefinito, il driver deve eliminare l'oggetto richiesta al termine dell'uso dell'oggetto; in caso contrario, l'oggetto request rimarrà fino a quando il gestore di I/O scarica il driver.
Per altre informazioni sulla creazione di oggetti richiesta framework, vedere Creazione di oggetti richiesta framework.
I driver basati su framework non devono usare il membro Tail.Overlay.DriverContext della struttura IRP , perché il framework usa questo membro.
Esempio
Esempio 1
Nell'esempio di codice seguente viene creato un oggetto richiesta framework da un IRP WDM specificato e quindi lo elimina. In questo esempio viene impostato il parametro RequestFreesIrp su TRUE, quindi il framework rimuove l'IRP quando l'handle di richiesta viene eliminato.
WDFREQUEST request;
PIRP irp;
//Creation
status = WdfRequestCreateFromIrp(
WDF_NO_OBJECT_ATTRIBUTES,
irp,
TRUE,
&request
);
...
//Deletion
WdfObjectDelete(request);
Esempio 2
L'esempio di codice seguente crea anche un oggetto richiesta framework da un'IRP WDM specificata e lo elimina. In questo esempio viene impostato il parametro RequestFreesIrp su FALSE, quindi il driver deve chiamare IoFreeIrp per rimuovere l'IRP . Tutte le chiamate di funzione nell'esempio sono necessarie.
WDF_REQUEST_REUSE_PARAMS params;
WDFREQUEST request;
PIRP irp;
//Creation
status = WdfRequestCreateFromIrp(
WDF_NO_OBJECT_ATTRIBUTES,
irp,
FALSE,
&request
);
...
//Deletion
WDF_REQUEST_REUSE_PARAMS_INIT(
¶ms,
WDF_REQUEST_REUSE_NO_FLAGS,
STATUS_SUCCESS
);
WDF_REQUEST_REUSE_PARAMS_SET_NEW_IRP(
¶ms,
NULL
);
status = WdfRequestReuse(
request,
¶ms
);
ASSERT(NT_SUCCESS(status));
IoFreeIrp(irp);
WdfObjectDelete(request);
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), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |