Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
[Aplica-se somente ao KMDF]
O método WdfIoQueueAssignForwardProgressPolicy permite que a capacidade da estrutura garantir o progresso do encaminhamento 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.
Valor de retorno
WdfIoQueueAssignForwardProgressPolicy retornará 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 do driver EvtIoAllocateResourcesForReservedRequest retornar um valor de status de erro, WdfIoQueueAssignForwardProgressPolicy retornará esse valor.
Uma verificação de bug ocorre se o driver fornece um identificador de objeto inválido.
Observações
O método WdfIoQueueAssignForwardProgressPolicy 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 KMDF 1.11 e posteriores, a fila de E/S que o parâmetro fila 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 OS IRPs.
Antes de wdfIoQueueAssignForwardProgressPolicy retorna, a estrutura faz o seguinte:
- Cria e armazena o número de objetos de solicitação especificados pelo driver para o TotalForwardProgressRequests membro da estrutura WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY.
- Se o driver anteriormente chamado WdfDeviceInitSetRequestAttributes, cada alocação incluirá espaço de contexto que WdfDeviceInitSetRequestAttributes especificado.
- Chama a função de retorno de chamada do driver EvtIoAllocateResourcesForReservedRequest 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 da estrutura ao qual pertencem. Se o driver chamar WdfDeviceInitSetRequestAttributes e especificar um EvtCleanupCallback ou EvtDestroyCallback função de retorno de chamada 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 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
Consulte também
EvtIoAllocateResourcesForReservedRequest