Funzione WdfRequestCompleteWithInformation (wdfrequest.h)
[Si applica a KMDF e UMDF]
Il metodo WdfRequestCompleteWithInformation archivia le informazioni di completamento e quindi completa una richiesta di I/O specificata con uno stato di completamento specificato.
Sintassi
void WdfRequestCompleteWithInformation(
[in] WDFREQUEST Request,
[in] NTSTATUS Status,
[in] ULONG_PTR Information
);
Parametri
[in] Request
Handle per l'oggetto request.
[in] Status
Valore NTSTATUS che rappresenta lo stato di completamento della richiesta. I valori di stato validi includono, ma non sono limitati a, quanto segue:
STATUS_SUCCESS
Il driver ha completato correttamente la richiesta.
STATUS_CANCELLED
Il driver ha annullato la richiesta.
STATUS_UNSUCCESSFUL
Il driver ha rilevato un errore durante l'elaborazione della richiesta.
[in] Information
Un ULONG_PTR impostato su un valore dipendente dalla richiesta. Ad esempio, al completamento di una richiesta di trasferimento, viene impostato sul numero di byte trasferiti. Questo campo non è estendibile dal driver.
Valore restituito
nessuno
Osservazioni
Un controllo di bug si verifica se il driver fornisce un handle di oggetti non valido.
Per le richieste di lettura, scrittura e IOCTL, è necessario che il driver chiami WdfRequestCompleteWithInformation
Per una richiesta di trasferimento non dati, chiamare WdfRequestComplete è invece un'opzione.
La chiamata a WdfRequestCompleteWithInformation equivale a chiamare WdfRequestSetInformation e quindi chiamare WdfRequestComplete.
Dopo la restituzione di una chiamata a WdfRequestCompleteWithInformation , l'handle della richiesta non è più valido a meno che il driver non abbia chiamato WdfObjectReference per aggiungere uno o più conteggi di riferimento aggiuntivi all'oggetto request. Si noti che dopo che WdfRequestCompleteWithInformation restituisce , il driver non deve tentare di accedere alla struttura WDM IRP associata, anche se ha chiamato WdfObjectReference.
Quando il driver chiama WdfRequestCompleteWithInformation, il framework fornisce un valore predefinito usato dal sistema per aumentare la priorità di runtime del thread che ha richiesto l'operazione di I/O. Per informazioni sui valori di aumento della priorità predefinita, vedere Specifica di incrementi di priorità durante il completamento delle richieste di I/O. Il driver può chiamare WdfRequestCompleteWithPriorityBoost per eseguire l'override del valore di boost di priorità predefinito.
Per altre informazioni sulla chiamata a WdfRequestCompleteWithInformation, vedere Completamento delle richieste di I/O.
Per un esempio di codice che illustra come usare WdfRequestCompleteWithInformation per recuperare il numero di byte copiati, vedere l'esempio di driver VirtualSerial2.
Esempio
Nell'esempio di codice seguente viene illustrato come un driver per un dispositivo USB potrebbe chiamare WdfRequestCompleteWithInformation in una funzione di callback di CompletamentoRoutine .
VOID
EvtRequestReadCompletionRoutine(
IN WDFREQUEST Request,
IN WDFIOTARGET Target,
PWDF_REQUEST_COMPLETION_PARAMS CompletionParams,
IN WDFCONTEXT Context
)
{
NTSTATUS status;
size_t bytesRead = 0;
PWDF_USB_REQUEST_COMPLETION_PARAMS usbCompletionParams;
UNREFERENCED_PARAMETER(Target);
UNREFERENCED_PARAMETER(Context);
status = CompletionParams->IoStatus.Status;
usbCompletionParams = CompletionParams->Parameters.Usb.Completion;
bytesRead = usbCompletionParams->Parameters.PipeRead.Length;
if (NT_SUCCESS(status)){
TraceEvents(
TRACE_LEVEL_INFORMATION,
DBG_READ,
"Number of bytes read: %I64d\n",
(INT64)bytesRead
);
} else {
TraceEvents(
TRACE_LEVEL_ERROR,
DBG_READ,
"Read failed - request status 0x%x UsbdStatus 0x%x\n",
status,
usbCompletionParams->UsbdStatus
);
}
WdfRequestCompleteWithInformation(
Request,
status,
bytesRead
);
return;
}
Requisiti
Vedi anche
WDF_USB_REQUEST_COMPLETION_PARAMS