Condividi tramite


Funzione WdfRequestCompleteWithPriorityBoost (wdfrequest.h)

[Si applica solo a KMDF]

Il metodo WdfRequestCompleteWithPriorityBoost completa una richiesta di I/O specificata e fornisce uno stato di completamento. Specifica inoltre un valore che il sistema può usare per aumentare la priorità di runtime del thread che ha richiesto l'operazione di I/O.

Sintassi

void WdfRequestCompleteWithPriorityBoost(
  [in] WDFREQUEST Request,
  [in] NTSTATUS   Status,
  [in] CCHAR      PriorityBoost
);

Parametri

[in] Request

Handle per l'oggetto richiesta framework che rappresenta la richiesta di I/O completata.

[in] Status

Valore NTSTATUS che rappresenta lo stato di completamento della richiesta. I valori di stato validi includono, ma non sono limitati ai seguenti:

STATUS_SUCCESS

Il driver ha completato la richiesta.

STATUS_CANCELLED

Il driver ha annullato la richiesta.

STATUS_UNSUCCESSFUL

Il driver ha rilevato un errore durante l'elaborazione della richiesta.

[in] PriorityBoost

Valore costante definito dal sistema in base al quale incrementare la priorità di runtime del thread originale che ha richiesto l'operazione. I valori costanti sono specifici del tipo di dispositivo e sono definiti in Wdm.h. Il formato per i nomi delle costanti è XXX_INCREMENT. Per altre informazioni sui valori di priorità boost, vedere Impostazione dei boost di priorità durante il completamento delle richieste di I/O.

Valore restituito

nessuno

Osservazioni

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

Il driver deve chiamare WdfRequestCompleteWithPriorityBoost se si vuole eseguire l'override del boost di priorità predefinito fornito dal framework. Ad esempio, il driver potrebbe impostare il boost di priorità su IO_NO_INCREMENT se è stato in grado di completare rapidamente la richiesta, forse perché ha rilevato un errore.

Dopo la restituzione di una chiamata a WdfRequestCompleteWithPriorityBoost , l'handle della richiesta non è più valido a meno che il driver non abbia chiamato WdfObjectReference per aggiungere uno o più conteggi di riferimenti aggiuntivi all'oggetto richiesta. Si noti che dopo la restituzione di WdfRequestCompleteWithPriorityBoost , il driver non deve tentare di accedere alla struttura WDM IRP associata, anche se ha chiamato WdfObjectReference.

Per altre informazioni sulla chiamata a WdfRequestCompleteWithPriorityBoost, vedere Completamento delle richieste di I/O.

Esempio

Nell'esempio di codice seguente viene illustrato come l'esempio in WdfRequestComplete può usare WdfRequestCompleteWithPriorityBoost anziché WdfRequestComplete.

switch (params.Type) {
    case WdfRequestTypeRead:
        length = params.Parameters.Read.Length;
        direction = WdfDmaDirectionReadFromDevice;
        break;
    case WdfRequestTypeWrite:
        length = params.Parameters.Write.Length;
        direction = WdfDmaDirectionWriteToDevice;
        break;
    default:
        WdfRequestCompleteWithPriorityBoost(
                                            Request,
                                            STATUS_INVALID_PARAMETER,
                                            IO_NO_INCREMENT
                                            );
        return;
    }

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 BufAfterReqCompletedIntIoctl(kmdf), BufAfterReqCompletedIntIoctlA(kmdf), BufAfterReqCompletedIoctl(kmdf), BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedRead(kmdf), BufAfterReqCompletedReadA(kmdf), BufAfterReqCompletedWrite(kmdf), BufAfterReqCompletedWriteA(kmdf), CompleteCanceledReq(kmdf), DeferredRequestCompleted(kmdf), DoubleCompletion(kmdf), DoubleCompletionLocal(kmdf), DriverCreate(kmdf), EvtIoStopCancel(kmdf), EvtIoStopCompleteOrStopAck(kmdf), EvtSurpriseRemoveNoRequestComplete(kmdf), InvalidReqAccess(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), MarkCancOnCancReqLocal(kmdf), MdlAfterReqCompletedIntIoctl(kmdf), MdlAfterReqCompletedIntIoctlA(kmdf), MdlAfterReqCompletedIoctl(kmdf), MdlAfterReqCompletedIoctlA(kmdf), MdlAfterReqCompletedRead(kmdf), MdlAfterReqCompletedReadA(kmdf), MdlAfterReqCompletedWrite(kmdf), MdlAfterReqCompletedWriteA(kmdf), MemAfterReqCompletedIntIoctl(kmdf), MemAfterReqCompletedIntIoctlA(kmdf), MemAfterReqCompletedIoctl(kmdf), MemAfterReqCompletedIoctlA(kmdf), MemAfterReqCompletedRead(kmdf), MemAfterReqCompletedReadA(kmdf), MemAfterReqCompletedWrite(kmdf), MemAfterReqCompletedWriteA(kmdf), NoCancelFromEvtSurpriseRemove(kmdf), ReqDelete(kmdf), ReqIsCancOnCancReq(kmdf), ReqNotCanceledLocal(kmdf), ReqSendFail(kmdf), RequestCompleted(kmdf), RequestCompletedLocal(kmdf)

Vedi anche

WdfObjectReference

WdfRequestComplete

WdfRequestCompleteWithInformation