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 |