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 |