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