Compartilhar via


Função KsAddIrpToCancelableQueue (ks.h)

A função KsAddIrpToCancelableQueue adiciona um IRP a uma fila de IRPs canceláveis, permitindo que o IRP seja cancelado. Se o IRP tiver sido definido anteriormente como um estado cancelado, a função KsAddIrpToCancelableQueue concluirá o cancelamento desse IRP.

Sintaxe

KSDDKAPI VOID KsAddIrpToCancelableQueue(
  [in, out]      PLIST_ENTRY           QueueHead,
  [in]           PKSPIN_LOCK           SpinLock,
  [in]           PIRP                  Irp,
  [in]           KSLIST_ENTRY_LOCATION ListLocation,
  [in, optional] PDRIVER_CANCEL        DriverCancel
);

Parâmetros

[in, out] QueueHead

Especifica o armazenamento alocado pelo driver para o cabeçalho da fila na qual adicionar o IRP.

[in] SpinLock

Aponta para o bloqueio de rotação do driver para acesso à fila especificada em QueueHead. Uma cópia desse ponteiro é mantida no irp (KSQUEUE_SPINLOCK_IRP_STORAGE) do IRP para uso pela rotina de cancelamento, se necessário.

[in] Irp

Especifica o IRP a ser adicionado à fila especificada em QueueHead.

[in] ListLocation

Indica se esse IRP deve ser colocado no início ou no final da fila. Esse valor deve ser KsListEntryTail ou KsListEntryHead.

[in, optional] DriverCancel

Parâmetro opcional que especifica uma rotina de cancelamento fornecida pelo driver a ser usada. Se for NULL, a KsCancelRoutine padrão será usada.

Retornar valor

Nenhum

Comentários

Se o IRP tiver sido colocado em um estado de cancelamento quando essa rotina for chamada, KsAddIrpToCancelableQueue chamará imediatamente a rotina de cancelamento especificada em DriverCancel ou se nenhuma rotina tiver sido especificada no DriverCancel , a rotina padrão de cancelamento de streaming será chamada.

A função KsAddIrpToCancelableQueue permite que os IRPs sejam cancelados antes mesmo de serem colocados em uma lista de cancelamento ou ao serem movidos de uma lista para outra. Essa função pode ser chamada no nível do IRQ DISPATCH_LEVEL ou inferior, a menos que a fila alocada pelo driver e todas as entradas na fila sejam residentes no sistema ou alocadas do armazenamento residente.

A função não usa o bloqueio de rotação de cancelamento para adicionar itens à lista. O acesso à lista é sincronizado usando o bloqueio de rotação fornecido e depende de operações atômicas em Irp-CancelRoutine>.

Requisitos

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