Compartir a través de


Función WdfIoQueueAssignForwardProgressPolicy (wdfio.h)

[Solo se aplica a KMDF]

El método WdfIoQueueAssignForwardProgressPolicy permite que el marco pueda garantizar el progreso hacia delante para una cola de E/S especificada.

Sintaxis

NTSTATUS WdfIoQueueAssignForwardProgressPolicy(
  [in] WDFQUEUE                              Queue,
  [in] PWDF_IO_QUEUE_FORWARD_PROGRESS_POLICY ForwardProgressPolicy
);

Parámetros

[in] Queue

Identificador de un objeto de cola de marco.

[in] ForwardProgressPolicy

Puntero a una estructura de WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY asignada por el controlador.

Valor devuelto

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

Código de retorno Descripción
STATUS_INVALID_PARAMETER
Un parámetro de entrada no es válido.
STATUS_INFO_LENGTH_MISMATCH
El tamaño de la estructura WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY es incorrecto.
STATUS_INSUFFICIENT_RESOURCES
La cantidad de memoria disponible es demasiado baja.
 

Este método también puede devolver otros valores de NTSTATUS. Además, si el del controlador EvtIoAllocateResourcesForReservedRequest función de devolución de llamada devuelve un valor de estado de error, WdfIoQueueAssignForwardProgressPolicy devuelve ese valor.

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

Observaciones

El métodoWdfIoQueueAssignForwardProgressPolicy crea objetos de solicitud que el marco reserva para situaciones de poca memoria y registra funciones de devolución de llamada que el marco llama para controlar situaciones de memoria baja.

En la versión 1.9 de KMDF, la cola de E/S que representa el parámetro Queue debe ser una cola de E/S predeterminada del dispositivo o una cola para la que el controlador ha llamado WdfDeviceConfigureRequestDispatching. El controlador puede llamar a WdfIoQueueAssignForwardProgressPolicy en cualquier momento después de llamar a WdfDeviceConfigureRequestDispatching.

En las versiones 1.11 y posteriores de KMDF, la cola de E/S que representa el parámetro Queue de puede ser cualquier cola que reciba una solicitud directamente desde el marco. Por ejemplo, el controlador puede especificar una cola a la que reenviará dinámicamente los IRP.

Antes de devuelve WdfIoQueueAssignForwardProgressPolicy, el marco hace lo siguiente:

Después de llamar al controlador WdfIoQueueAssignForwardProgressPolicy para crear objetos de solicitud reservados, el marco usa esos objetos reservados cada vez que se produce un error en el intento de crear un nuevo objeto de solicitud. (Normalmente, estos errores se deben a situaciones de memoria baja).

El marco elimina sus objetos de solicitud reservados solo cuando elimina el objeto de cola del marco al que pertenecen. Si el controlador llama a WdfDeviceInitSetRequestAttributes y especifica un EvtCleanupCallback o EvtDestroyCallback función de devolución de llamada para sus objetos de solicitud, el marco llama a estas funciones de devolución de llamada para sus objetos de solicitud reservados cuando elimina los objetos .

Para obtener más información sobre el método WdfIoQueueAssignForwardProgressPolicy y cómo usar la funcionalidad de progreso hacia delante garantizada del marco, consulte Garantizar el progreso hacia delante de las operaciones de E/S.

Ejemplos

En este ejemplo de código se configura una cola de E/S creada anteriormente para recibir solicitudes de escritura y, a continuación, se habilita el progreso hacia delante garantizado para la cola.

#define MAX_RESERVED_REQUESTS 10

WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY queueForwardProgressPolicy;
WDFQUEUE writeQueue;
NTSTATUS status = STATUS_SUCCESS;
...
status = WdfDeviceConfigureRequestDispatching(
             device,
             writeQueue,
             WdfRequestTypeWrite
             );
if(!NT_SUCCESS(status)) {
    return status;
}
WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY_DEFAULT_INIT(
    &queueForwardProgressPolicy,
    MAX_RESERVED_REQUESTS
    );
status = WdfIoQueueAssignForwardProgressPolicy(
             writeQueue,
             &queueForwardProgressPolicy
             );
if(!NT_SUCCESS(status)) {
    return status;
}

Requisitos

Requisito Valor
de la plataforma de destino de Universal
versión mínima de KMDF 1.9
encabezado wdfio.h (incluya Wdf.h)
Biblioteca Wdf01000.sys (consulte Control de versiones de la biblioteca de marcos).
irQL PASSIVE_LEVEL
reglas de cumplimiento de DDI DriverCreate(kmdf)

Consulte también

EvtIoAllocateResourcesForReservedRequest

WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY

WdfDeviceConfigureRequestDispatching