Compartilhar via


Função KsMoveIrpsOnCancelableQueue (ks.h)

A função KsMoveIrpsOnCancelableQueue move os IRPs especificados do parâmetro SourceList para o parâmetro DestinationList , dependendo do valor retornado da função KStrIrpListCallback definida pelo minidriver.

Sintaxe

KSDDKAPI NTSTATUS KsMoveIrpsOnCancelableQueue(
  [in, out]      PLIST_ENTRY           SourceList,
  [in]           PKSPIN_LOCK           SourceLock,
  [in, out]      PLIST_ENTRY           DestinationList,
  [in, optional] PKSPIN_LOCK           DestinationLock,
  [in]           KSLIST_ENTRY_LOCATION ListLocation,
  [in]           PFNKSIRPLISTCALLBACK  ListCallback,
  [in]           PVOID                 Context
);

Parâmetros

[in, out] SourceList

Especifica o cabeçalho da fila da qual remover os IRPs.

[in] SourceLock

Ponteiro para o bloqueio de rotação do driver para acesso à fila de origem.

[in, out] DestinationList

Especifica o cabeçalho da fila na qual adicionar os IRPs.

[in, optional] DestinationLock

Opcionalmente, contém um ponteiro para o bloqueio de rotação do driver para acesso à fila de destino. Se isso não for fornecido, o parâmetro SourceLock será considerado para controlar ambas as filas. Se fornecido, esse bloqueio sempre será adquirido após o parâmetro SourceLock . Se a lista de destino tiver um bloqueio de rotação separado, o bloqueio de rotação cancelar em todo o sistema será adquirido pela primeira vez para mover IRPs e permitir que o bloqueio de rotação KSQUEUE_SPINLOCK_IRP_STORAGE() seja atualizado.

[in] ListLocation

Indica se os IRPs devem ser enumerados da cabeça ou da parte final da fila de origem. Todos os IRPs movidos são colocados na extremidade oposta da fila de destino para que a ordenação seja mantida.

[in] ListCallback

Especifica a função KStrIrpListCallback definida pelo minidriver a ser chamada para indicar se um IRP específico deve ser movido de SourceList para DestinationList ou se a enumeração deve ser encerrada.

[in] Context

Contexto passado para ListCallback.

Retornar valor

Retorna STATUS_SUCCESS se a lista foi completamente enumerada; caso contrário, retorna qualquer aviso ou erro retornado pela função de retorno de chamada KStrIrpListCallback definida pelo minidriver que interrompeu a enumeração.

Comentários

Um IRP será movido se a função KStrIrpListCallback indicar que ela deve ser movida, independentemente de ter sido adquirida no momento. Se KStrIrpListCallback retornar STATUS_SUCCESS, o IRP será movido. Se retornar STATUS_NO_MATCH, o IRP não será movido. Qualquer outro aviso de retorno ou valor de erro encerrará a enumeração e será retornado pela função . O valor STATUS_NO_MATCH não deve ser retornado como um erro por KStrIrpListCallback. KStrIrpListCallback é chamado em DISPATCH_LEVEL. KStrIrpListCallback é sempre chamado pelo menos uma vez no final com um valor IRP NULL para concluir a enumeração de lista.

KsMoveIrpsOnCancelableQueue continua na lista até que a função de retorno de chamada indique que a pesquisa deve ser encerrada ou o final da lista seja atingido. KsMoveIrpsOnCancelableQueue minimiza o uso do bloqueio de rotação cancelar em todo o sistema usando os bloqueios de rotação fornecidos para sincronizar o acesso quando possível. KsMoveIrpsOnCancelableQueue não permite que a rotina de cancelamento seja modificada durante a movimentação de IRPs.

A função pode ser chamada em DISPATCH_LEVEL ou inferior.

Requisitos

Requisito Valor
Plataforma de Destino Universal
Cabeçalho ks.h (inclua Ks.h)
Biblioteca Ks.lib

Confira também

KStrIrpListCallback