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,还是通过将 cancel 函数设置为 NULL获取。 如果仅获取 IRP,则必须稍后使用 KsReleaseIrpOnCancelableQueue 发布 IRP,或者使用 KsRemoveSpecificIrpFromCancelableQueue完全删除。

返回值

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

言论

在前面的参数中使用这些枚举来控制从何处删除 IRP 以及如何删除。

typedef enum {
    KsListEntryTail,
    KsListEntryHead
} KSLIST_ENTRY_LOCATION;

typedef enum {
    KsAcquireOnly,
    KsAcquireAndRemove
} KSIRP_REMOVAL_OPERATION;

要求

要求 价值
目标平台 普遍
标头 ks.h (包括 Ks.h)
Ks.lib

另请参阅

KsReleaseIrpOnCancelableQueue

KsRemoveSpecificIrpFromCancelableQueue