다음을 통해 공유


KsAddIrpToCancelableQueue 함수(ks.h)

KsAddIrpToCancelableQueue 함수는 취소 가능한 IRP 큐에 IRP를 추가하여 IRP를 취소할 수 있도록 합니다. IRP가 이전에 취소된 상태로 설정된 경우 KsAddIrpToCancelableQueue 함수는 해당 IRP의 취소를 완료합니다.

구문

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
);

매개 변수

[in, out] QueueHead

IRP를 추가할 큐의 헤드에 대해 드라이버 할당 스토리지를 지정합니다.

[in] SpinLock

QueueHead에 지정된 큐에 대한 큐 액세스에 대한 드라이버의 스핀 잠금을 가리킵니다. 이 포인터의 복사본은 필요한 경우 취소 루틴에서 사용하기 위해 IRP의 KSQUEUE_SPINLOCK_IRP_STORAGE(Irp)에 보관됩니다.

[in] Irp

QueueHead에 지정된 큐에 추가할 IRP를 지정합니다.

[in] ListLocation

이 IRP를 큐의 시작 또는 끝에 배치해야 하는지 여부를 나타냅니다. 이 값은 KsListEntryTail 또는 KsListEntryHead여야 합니다.

[in, optional] DriverCancel

사용할 드라이버 제공 취소 루틴을 지정하는 선택적 매개 변수입니다. NULL인 경우 표준 KsCancelRoutine이 사용됩니다.

반환 값

없음

설명

이 루틴이 호출될 때 IRP가 취소 상태로 전환된 경우 KsAddIrpToCancelableQueueDriverCancel에 지정된 취소 루틴을 즉시 호출하거나 DriverCancel 에 루틴이 지정되지 않은 경우 기본 스트리밍 취소 루틴이 호출됩니다.

KsAddIrpToCancelableQueue 함수를 사용하면 취소 목록에 배치되기 전이나 목록에서 다른 목록으로 이동할 때에도 IRP를 취소할 수 있습니다. 드라이버 할당 큐와 큐의 모든 항목이 시스템 상주 또는 상주 스토리지에서 할당되지 않는 한 IRQ 수준 DISPATCH_LEVEL 이하에서 이 함수를 호출할 수 있습니다.

함수는 취소 스핀 잠금을 사용하여 목록에 항목을 추가하지 않습니다. 목록에 대한 액세스는 제공된 스핀 잠금을 사용하여 동기화되며 Irp-CancelRoutine>에서 원자성 작업에 의존합니다.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 ks.h(Ks.h 포함)
라이브러리 Ks.lib