Função WdfIoQueueAssignForwardProgressPolicy (wdfio.h)
[Aplica-se somente ao KMDF]
O método WdfIoQueueAssignForwardProgressPolicy permite que a estrutura garanta o progresso para uma fila de E/S especificada.
Sintaxe
NTSTATUS WdfIoQueueAssignForwardProgressPolicy(
[in] WDFQUEUE Queue,
[in] PWDF_IO_QUEUE_FORWARD_PROGRESS_POLICY ForwardProgressPolicy
);
Parâmetros
[in] Queue
Um identificador para um objeto de fila de estrutura.
[in] ForwardProgressPolicy
Um ponteiro para uma estrutura de WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY alocada pelo driver.
Retornar valor
WdfIoQueueAssignForwardProgressPolicy retorna STATUS_SUCCESS se a operação for bem-sucedida. Caso contrário, esse método poderá retornar um destes valores:
Código de retorno | Descrição |
---|---|
|
Um parâmetro de entrada é inválido. |
|
O tamanho da estrutura WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY está incorreto. |
|
A quantidade de memória disponível é muito baixa. |
Esse método também pode retornar outros valores NTSTATUS. Além disso, se a função de retorno de chamada EvtIoAllocateResourcesForReservedRequest do driver retornar um erro status valor, WdfIoQueueAssignForwardProgressPolicy retornará esse valor.
Um bug marcar ocorrerá se o driver fornecer um identificador de objeto inválido.
Comentários
O métodoWdfIoQueueAssignForwardProgressPolicy cria objetos de solicitação que a estrutura reserva para situações de memória baixa e registra funções de retorno de chamada que a estrutura chama para lidar com situações de memória baixa.
No KMDF versão 1.9, a fila de E/S que o parâmetro Queue representa deve ser a fila de E/S padrão de um dispositivo ou uma fila para a qual o driver chamou WdfDeviceConfigureRequestDispatching. O driver pode chamar WdfIoQueueAssignForwardProgressPolicy a qualquer momento depois de chamar WdfDeviceConfigureRequestDispatching.
Nas versões 1.11 e posteriores do KMDF, a fila de E/S que o parâmetro Queue representa pode ser qualquer fila que receba uma solicitação diretamente da estrutura. Por exemplo, o driver pode especificar uma fila para a qual ele encaminhará dinamicamente IRPs.
Antes que WdfIoQueueAssignForwardProgressPolicy retorne, a estrutura faz o seguinte:
- Cria e armazena o número de objetos de solicitação especificados pelo driver para o membro TotalForwardProgressRequests da estrutura WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY .
- Se o driver anteriormente chamado WdfDeviceInitSetRequestAttributes, cada alocação incluirá espaço de contexto especificado por WdfDeviceInitSetRequestAttributes .
- Chama a função de retorno de chamada EvtIoAllocateResourcesForReservedRequest do driver para cada objeto de solicitação criado pela estrutura.
A estrutura exclui seus objetos de solicitação reservada somente quando exclui o objeto de fila de estrutura ao qual pertencem. Se o driver chamar WdfDeviceInitSetRequestAttributes e especificar uma função de retorno de chamada EvtCleanupCallback ou EvtDestroyCallback para seus objetos de solicitação, a estrutura chamará essas funções de retorno de chamada para seus objetos de solicitação reservados quando excluir os objetos.
Para obter mais informações sobre o método WdfIoQueueAssignForwardProgressPolicy e como usar a funcionalidade de progresso de encaminhamento garantida da estrutura, consulte Garantindo o progresso futuro das operações de E/S.
Exemplos
Este exemplo de código configura uma fila de E/S criada anteriormente para receber solicitações de gravação e, em seguida, habilita o progresso de encaminhamento garantido para a fila.
#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 |
---|---|
Plataforma de Destino | Universal |
Versão mínima do KMDF | 1,9 |
Cabeçalho | wdfio.h (inclua Wdf.h) |
Biblioteca | Wdf01000.sys (consulte Controle de versão da biblioteca de estrutura.) |
IRQL | PASSIVE_LEVEL |
Regras de conformidade de DDI | DriverCreate(kmdf) |
Confira também
EvtIoAllocateResourcesForReservedRequest