Función WdfRequestCompleteWithPriorityBoost (wdfrequest.h)

[Solo se aplica a KMDF]

El método WdfRequestCompleteWithPriorityBoost completa una solicitud de E/S especificada y proporciona un estado de finalización. También especifica un valor que el sistema puede usar para aumentar la prioridad en tiempo de ejecución del subproceso que solicitó la operación de E/S.

Sintaxis

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

Parámetros

[in] Request

Identificador del objeto de solicitud de marco que representa la solicitud de E/S que se está completando.

[in] Status

Valor NTSTATUS que representa el estado de finalización de la solicitud. Entre los valores de estado válidos se incluyen, entre otros, los siguientes:

STATUS_SUCCESS

El controlador completó correctamente la solicitud.

STATUS_CANCELLED

El controlador canceló la solicitud.

STATUS_UNSUCCESSFUL

El controlador encontró un error al procesar la solicitud.

[in] PriorityBoost

Valor constante definido por el sistema por el que se incrementa la prioridad en tiempo de ejecución del subproceso original que solicitó la operación. Los valores constantes son específicos del tipo de dispositivo y se definen en Wdm.h. El formato de los nombres de constantes es XXX_INCREMENT. Para obtener más información sobre los valores de aumento de prioridad, vea Especificar aumentos de prioridad al completar solicitudes de E/S.

Valor devuelto

None

Observaciones

Se produce una comprobación de errores si el controlador proporciona un identificador de objeto no válido.

El controlador debe llamar a WdfRequestCompleteWithPriorityBoost si desea invalidar el aumento de prioridad predeterminado que proporciona el marco. Por ejemplo, el controlador podría establecer el aumento de prioridad en IO_NO_INCREMENT si pudo completar la solicitud rápidamente, quizás porque detectó un error.

Después de que se devuelva una llamada a WdfRequestCompleteWithPriorityBoost , el identificador de solicitud ya no es válido a menos que el controlador haya llamado A WdfObjectReference para agregar uno o varios recuentos de referencia adicionales al objeto de solicitud. Tenga en cuenta que después de que WdfRequestCompleteWithPriorityBoost devuelva, el controlador no debe intentar acceder a la estructura IRP de WDM asociada, incluso si se ha llamado a WdfObjectReference.

Para obtener más información sobre cómo llamar a WdfRequestCompleteWithPriorityBoost, consulte Finalización de solicitudes de E/S.

Ejemplos

En el ejemplo de código siguiente se muestra cómo el ejemplo de WdfRequestComplete puede usar WdfRequestCompleteWithPriorityBoost en lugar 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 Value
Plataforma de destino Universal
Versión mínima de KMDF 1.0
Encabezado wdfrequest.h (incluir Wdf.h)
Library Wdf01000.sys (consulte Control de versiones de la biblioteca de marcos).
IRQL <=DISPATCH_LEVEL
Reglas de cumplimiento de 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)

Consulte también

WdfObjectReference

WdfRequestComplete

WdfRequestCompleteWithInformation