Compartilhar via


Função WdfIoQueueReadyNotify (wdfio.h)

[Aplica-se a KMDF e UMDF]

O método WdfIoQueueReadyNotify registra (ou desregistros) uma função de retorno de chamada de evento que a estrutura chama sempre que uma fila de E/S especificada que estava vazia anteriormente recebe uma ou mais solicitações de E/S.

Sintaxe

NTSTATUS WdfIoQueueReadyNotify(
  [in]           WDFQUEUE               Queue,
  [in, optional] PFN_WDF_IO_QUEUE_STATE QueueReady,
  [in, optional] WDFCONTEXT             Context
);

Parâmetros

[in] Queue

Um identificador para um objeto de fila de estrutura.

[in, optional] QueueReady

Um ponteiro para uma função de retorno de chamada EvtIoQueueState fornecida pelo driver, se o driver estiver se registrando para notificação pronta ou NULL se o driver estiver desregiscando.

[in, optional] Context

Um ponteiro não tipado para informações de contexto fornecidas pelo driver que a estrutura passa para a função de retorno de chamada EvtIoQueueState, se o driver estiver se registrando para notificação pronta ou NULL se o driver estiver desregistroando.

Valor de retorno

WdfIoQueueReadyNotify retornará STATUS_SUCCESS se a operação for bem-sucedida. Caso contrário, esse método poderá retornar um dos seguintes valores:

Código de retorno Descrição
STATUS_INVALID_PARAMETER
O driver forneceu um identificador inválido.
STATUS_INVALID_DEVICE_REQUEST
Esse valor será retornado se ocorrer um destes procedimentos:
  • O DispatchType membro da estrutura de WDF_IO_QUEUE_CONFIG da fila de E/S especificada não é WdfIoQueueDispatchManual.
  • O driver já havia chamado WdfIoQueueReadyNotify e registrado uma função de retorno de chamada EvtIoQueueState.
  • O driver está tentando cancelar a função de retorno de chamada de notificação, mas uma função de retorno de chamada não está registrada ou o driver não chamou WdfIoQueueStop ou WdfIoQueueStopSynchously.
 

Esse método também pode retornar outros valores NTSTATUS .

Uma verificação de bug ocorre se o driver fornece um identificador de objeto inválido.

Observações

Depois que um driver tiver chamado WdfIoQueueReadyNotify para registrar uma função de retorno de chamada EvtIoQueueState, a estrutura chamará a função de retorno de chamada sempre que o estado da fila especificada mudar de vazio para não vazio. Especificamente, a estrutura chama EvtIoQueueState quando uma solicitação chega em uma fila vazia, mesmo que o driver ainda possua solicitações entregues anteriormente da fila que ainda não foi concluída. Você pode modificar o IRQL no qual o retorno de chamada é executado especificando ExecutionLevel em WDF_OBJECT_ATTRIBUTES no momento da criação da fila. Para obter mais informações, consulte a seção Comentários doEVT_WDF_IO_QUEUE_STATE.

A estrutura não chama EvtIoQueueState enquanto a fila especificada é interrompida. Quando a fila é iniciada, a estrutura chama EvtIoQueueState se a fila não estiver vazia.

O driver pode chamar WdfIoQueueReadyNotify somente para filas de E/S que usam o método de expedição manual.

A função de retorno de chamada EvtIoQueueState normalmente chama WdfIoQueueRetrieveNextRequest ou WdfIoQueueRetrieveRequestByFileObject em um loop para recuperar todas as solicitações que chegaram desde a última vez em que a função de retorno de chamada foi executada.

Para impedir que a estrutura chame a função de retorno de chamada EvtIoQueueState, o driver deve chamar WdfIoQueueReadyNotify novamente com o parâmetro QueueReady definido como NULL. No entanto, o driver deve primeiro chamar WdfIoQueueStop ou WdfIoQueueStopStopSynchronamente para parar a fila de E/S. O driver pode chamar WdfIoQueueStart para reiniciar a fila.

Quando um driver chama WdfIoQueueReadyNotify para registrar uma função de retorno de chamada EvtIoQueueState, é possível que a estrutura chame a função de retorno de chamada antes de WdfIoQueueReadyNotify retorna.

Para obter mais informações sobre o método WdfIoQueueReadyNotify, consulte Métodos de Expedição para Solicitações de E/S.

Exemplos

O exemplo de código a seguir registra a função EvtIoQueueReady do driver, para que essa função seja chamada quando a fila de E/S especificada receber uma solicitação de E/S.

Status = WdfIoQueueReadyNotify(
                               ReadQueue,
                               EvtIoQueueReady,
                               myQueueContext
                               );

Requisitos

Requisito Valor
da Plataforma de Destino Universal
versão mínima do KMDF 1.0
versão mínima do UMDF 2.0
cabeçalho wdfio.h (inclua Wdf.h)
Biblioteca Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <= DISPATCH_LEVEL
regras de conformidade de DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Consulte também

EvtIoQueueState

WDF_IO_QUEUE_CONFIG

WdfIoQueueRetrieveNextRequest

WdfIoQueueRetrieveRequestByFileObject