Função WdfRequestCompleteWithPriorityBoost (wdfrequest.h)

[Aplica-se somente ao KMDF]

O método WdfRequestCompleteWithPriorityBoost conclui uma solicitação de E/S especificada e fornece uma 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.

Retornar valor

Nenhum

Comentários

Um bug marcar ocorrerá se o driver fornecer 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 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 deverá tentar acessar a estrutura WDM IRP associada, mesmo que tenha chamado WdfObjectReference.

Para obter mais informações sobre como chamar WdfRequestCompleteWithPriorityBoost, consulte Concluindo 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

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