Compartir a través de


Función WdfRequestReuse (wdfrequest.h)

[Se aplica a KMDF y UMDF]

El método WdfRequestReuse reinicializa un objeto de solicitud de marco para que se pueda reutilizar.

Sintaxis

NTSTATUS WdfRequestReuse(
  [in] WDFREQUEST                Request,
  [in] PWDF_REQUEST_REUSE_PARAMS ReuseParams
);

Parámetros

[in] Request

Identificador de un objeto de solicitud de marco.

[in] ReuseParams

Puntero a una estructura de WDF_REQUEST_REUSE_PARAMS asignada por el autor de la llamada.

Valor devuelto

WdfRequestReuse devuelve STATUS_SUCCESS si la operación se realiza correctamente. De lo contrario, este método podría devolver uno de los siguientes valores:

Código devuelto Descripción
STATUS_INVALID_PARAMETER
Un parámetro de entrada no es válido.
STATUS_WDF_REQUEST_INVALID_STATE
El controlador proporcionó un IRP en la estructura WDF_REQUEST_REUSE_PARAMS , pero el objeto de solicitud especificado no se obtuvo de WdfRequestCreateFromIrp.
 

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

Comentarios

Un controlador basado en marcos puede reutilizar objetos de solicitud de marco creados por llamadas anteriores a WdfRequestCreate o WdfRequestCreateFromIrp. Los controladores también pueden reutilizar los objetos de solicitud que han recibido del marco, pero no pueden establecer la marca WDF_REQUEST_REUSE_SET_NEW_IRP para esos objetos de solicitud.

Nota

Los controladores deben tener precaución al reutilizar los objetos de solicitud recibidos del marco. La reutilización de esta solicitud restablece la marca de cancelación del IRP subyacente y puede impedir que un controlador de llamada cancele la solicitud.

Un controlador puede reutilizar un objeto de solicitud una vez completada la solicitud original. Una vez que un controlador ha llamado a WdfRequestReuse, el contenido de la solicitud debe reinicializarse. El controlador puede especificar algunos parámetros de solicitud en la estructura WDF_REQUEST_REUSE_PARAMS .

Si desea que la solicitud reutilizada tenga una función de devolución de llamada CompletionRoutine , el controlador debe llamar a WdfRequestSetCompletionRoutine después de llamar a WdfRequestReuse.

Para obtener más información sobre WdfRequestReuse, consulte Reutilización de objetos de solicitud de marco.

Ejemplos

El ejemplo de código siguiente forma parte de una función de devolución de llamada CompletionRoutine que llama a WdfRequestReuse para que el controlador pueda reutilizar una solicitud asignada por el controlador.

VOID
MyRequestCompletionRoutine(
    IN WDFREQUEST  Request,
    IN WDFIOTARGET  Target,
    PWDF_REQUEST_COMPLETION_PARAMS  CompletionParams,
    IN WDFCONTEXT  Context
    )
{
    WDF_REQUEST_REUSE_PARAMS  params;
    NTSTATUS  status;
...
    WDF_REQUEST_REUSE_PARAMS_INIT(
                                  &params,
                                  WDF_REQUEST_REUSE_NO_FLAGS,
                                  STATUS_SUCCESS
                                  );

    status = WdfRequestReuse(
                             Request,
                             &params
                             );
    ASSERT(NT_SUCCESS(status));
...
}

Requisitos

Requisito Value
Plataforma de destino Universal
Versión mínima de KMDF 1.0
Versión mínima de UMDF 2.0
Encabezado wdfrequest.h (incluya Wdf.h)
Library Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
Reglas de cumplimiento de DDI DriverCreate(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), ReqSendFail(kmdf)

Consulte también

CompletionRoutine

WDF_REQUEST_REUSE_PARAMS

WDF_REQUEST_REUSE_PARAMS_INIT

WdfRequestCreate

WdfRequestCreateFromIrp

WdfRequestSetCompletionRoutine