KsRemoveIrpFromCancelableQueue 函数 (ks.h)

KsRemoveIrpFromCancelableQueue 函数从可以取消的指定队列中弹出下一个非关联 IRP,并删除其取消状态。 函数将搜索列表,直到找到具有取消例程的 IRP 或到达列表的末尾。 在大多数情况下, 函数通过使用提供的旋转锁来同步访问,从而最大程度地减少对取消旋转锁的使用。 可以在 IRQ 级别调用函数DISPATCH_LEVEL或更低级别。

语法

KSDDKAPI PIRP KsRemoveIrpFromCancelableQueue(
  [in, out] PLIST_ENTRY             QueueHead,
  [in]      PKSPIN_LOCK             SpinLock,
  [in]      KSLIST_ENTRY_LOCATION   ListLocation,
  [in]      KSIRP_REMOVAL_OPERATION RemovalOperation
);

参数

[in, out] QueueHead

指向要从中删除 IRP 的队列的头。

[in] SpinLock

指向用于队列访问的驱动程序的旋转锁。

[in] ListLocation

指示此 IRP 应来自队列的开头还是末尾。

[in] RemovalOperation

指定是从列表中删除 IRP,还是仅通过将取消函数设置为 NULL 来获取 IRP。 如果仅获取 IRP,则必须稍后使用 KsReleaseIrpOnCancelableQueue 发布 IRP,或使用 KsRemoveSpecificIrpFromCancelableQueue 完全删除。

返回值

KsRemoveIrpFromCancelableQueue 函数返回列表中下一个非关联 IRP;如果未找到任何 IRP,或者找不到尚未获取的 IRP,则返回 NULL

注解

这些枚举在前面的参数中用于控制从中删除 IRP 的位置以及如何删除。

typedef enum {
    KsListEntryTail,
    KsListEntryHead
} KSLIST_ENTRY_LOCATION;

typedef enum {
    KsAcquireOnly,
    KsAcquireAndRemove
} KSIRP_REMOVAL_OPERATION;

要求

要求
目标平台 通用
标头 ks.h (包括 Ks.h)
Library Ks.lib

另请参阅

KsReleaseIrpOnCancelableQueue

KsRemoveSpecificIrpFromCancelableQueue