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 |
---|---|
|
Un parámetro de entrada no es válido. |
|
El tamaño de la estructura de WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY es incorrecto. |
|
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:
- Crea y almacena el número de objetos de solicitud que el controlador ha especificado para el miembro TotalForwardProgressRequests de la estructura WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY .
- Si el controlador anteriormente llamado WdfDeviceInitSetRequestAttributes, cada asignación incluye espacio de contexto que WdfDeviceInitSetRequestAttributes especificó.
- Llama a la función de devolución de llamada EvtIoAllocateResourcesForReservedRequest del controlador para cada objeto de solicitud que crea el marco.
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