Función WdfIoQueueAssignForwardProgressPolicy (wdfio.h)

[Solo se aplica a KMDF]

El método WdfIoQueueAssignForwardProgressPolicy permite a la plataforma garantizar el progreso hacia delante de 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 devuelto Descripción
STATUS_INVALID_PARAMETER
Un parámetro de entrada no es válido.
STATUS_INFO_LENGTH_MISMATCH
El tamaño de la estructura de WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY es incorrecto.
STATUS_INSUFFICIENT_RESOURCES
La cantidad de memoria disponible es demasiado baja.
 

Este método también podría devolver otros valores NTSTATUS. Además, si la función de devolución de llamada EvtIoAllocateResourcesForReservedRequest del controlador 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.

Comentarios

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

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 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 que se devuelva WdfIoQueueAssignForwardProgressPolicy , el marco hace lo siguiente:

Una vez que el controlador ha llamado a WdfIoQueueAssignForwardProgressPolicy para crear objetos de solicitud reservados, el marco usa esos objetos reservados cada vez que se produce un error en su 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 una función de devolución de llamada EvtCleanupCallback o EvtDestroyCallback 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 Value
Plataforma de destino Universal
Versión mínima de KMDF 1,9
Encabezado wdfio.h (incluya Wdf.h)
Library 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