Função WdfRequestCompleteWithPriorityBoost (wdfrequest.h)

[Aplica-se somente ao KMDF]

O método WdfRequestCompleteWithPriorityBoost conclui uma solicitação de E/S especificada e fornece um status de conclusão. Ele também especifica um valor que o sistema pode usar para aumentar a prioridade de tempo de execução do thread que solicitou a operação de E/S.

Sintaxe

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

Parâmetros

[in] Request

Um identificador para o objeto de solicitação de estrutura que representa a solicitação de E/S que está sendo concluída.

[in] Status

Um valor NTSTATUS que representa o status de conclusão da solicitação. Os valores de status válidos incluem, mas não se limitam a:

STATUS_SUCCESS

O driver concluiu a solicitação com êxito.

STATUS_CANCELLED

O driver cancelou a solicitação.

STATUS_UNSUCCESSFUL

O driver encontrou um erro ao processar a solicitação.

[in] PriorityBoost

Um valor constante definido pelo sistema pelo qual incrementar a prioridade de tempo de execução do thread original que solicitou a operação. Os valores constantes são específicos do tipo de dispositivo e são definidos em Wdm.h. O formato para os nomes constantes é XXX_INCREMENT. Para obter mais informações sobre valores de aumento de prioridade, consulte Especificando aumentos de prioridade ao concluir solicitações de E/S.

Valor retornado

Nenhum

Comentários

Ocorre uma verificação de bug se o driver fornece um identificador de objeto inválido.

Seu driver deve chamar WdfRequestCompleteWithPriorityBoost se você quiser substituir o aumento de prioridade padrão que a estrutura fornece. Por exemplo, o driver pode definir o aumento de prioridade como IO_NO_INCREMENT se ele foi capaz de concluir a solicitação rapidamente, talvez porque ele detectou um erro.

Depois que uma chamada para WdfRequestCompleteWithPriorityBoost retorna, o identificador de solicitação não é mais válido, a menos que o driver tenha chamado WdfObjectReference para adicionar uma ou mais contagens de referência adicionais ao objeto de solicitação. Observe que, depois que WdfRequestCompleteWithPriorityBoost retornar, o driver não deve tentar acessar a estrutura do WDM IRP associada, mesmo que tenha chamado WdfObjectReference.

Para obter mais informações sobre como chamar WdfRequestCompleteWithPriorityBoost, consulte Como concluir solicitações de E/S.

Exemplos

O exemplo de código a seguir mostra como o exemplo em WdfRequestComplete pode usar WdfRequestCompleteWithPriorityBoost em vez de 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;
    }

Requisitos

   
Plataforma de Destino Universal
Versão mínima do KMDF 1,0
Cabeçalho wdfrequest.h (inclua Wdf.h)
Biblioteca Wdf01000.sys (consulte o Controle de Versão da Biblioteca de Estruturas).)
IRQL <=DISPATCH_LEVEL
Regras de conformidade 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)

Confira também

WdfObjectReference

WdfRequestComplete

WdfRequestCompleteWithInformation