다음을 통해 공유


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