Compartilhar via


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
STATUS_INVALID_PARAMETER
Um parâmetro de entrada é inválido.
STATUS_INFO_LENGTH_MISMATCH
O tamanho da estrutura WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY está incorreto.
STATUS_INSUFFICIENT_RESOURCES
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:

Depois que o driver tiver chamado WdfIoQueueAssignForwardProgressPolicy para criar objetos de solicitação reservados, a estrutura usará esses objetos reservados sempre que sua tentativa de criar um novo objeto de solicitação falhar. (Normalmente, essas falhas são causadas por situações de memória baixa.)

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

WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY

WdfDeviceConfigureRequestDispatching