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 |