IO_CSQ_RELEASE_LOCK回调函数 (wdm.h)
CsqReleaseLock 例程由系统用来释放使用 CsqAcquireLock获取的锁。
语法
IO_CSQ_RELEASE_LOCK IoCsqReleaseLock;
void IoCsqReleaseLock(
[in] PIO_CSQ Csq,
[in] KIRQL Irql
)
{...}
参数
[in] Csq
指向取消安全 IRP 队列的 IO_CSQ 结构的指针。
[in] Irql
指定 IRQL。 这是获取锁时 CsqAcquireLock 存储的值。
返回值
没有
言论
驱动程序在初始化队列的 IO_CSQ 结构时,为取消安全的 IRP 队列指定 CsqReleaseLock 例程。 驱动程序将例程指定为初始化 IO_CSQ时 IoCsqInitialize 或 IoCsqInitializeEx 的 CsqReleaseLock 参数。 有关详细信息,请参阅 Cancel-Safe IRP 队列。
系统调用此函数释放使用 CsqAcquireLock获取的锁。
如果驱动程序使用旋转锁实现队列的锁定,则必须在获取锁时存储当前 IRQL,并在释放锁时提供存储的 IRQL。 CsqAcquireLock 例程存储当前 IRQL,系统将存储的值作为 Irql 参数传递给 CsqReleaseLock。 否则,驱动程序可以忽略 Irql 参数。 有关旋转锁的信息,请参阅 旋转锁。
驱动程序可以使用任何锁定机制来锁定队列,例如互斥体。 有关互斥体的详细信息,请参阅 互斥体对象。
例子
若要定义 CsqReleaseLock 回调例程,必须首先提供一个函数声明来标识要定义的回调例程的类型。 Windows 为驱动程序提供一组回调函数类型。 使用回调函数类型声明函数有助于 驱动程序代码分析、静态驱动程序验证程序(SDV)和其他验证工具查找错误,这是为 Windows作系统编写驱动程序的要求。
例如,若要定义名为 MyCsqReleaseLock
的 CsqReleaseLock 回调例程,请使用IO_CSQ_RELEASE_LOCK类型,如以下代码示例所示:
IO_CSQ_RELEASE_LOCK MyCsqReleaseLock;
然后,按如下所示实现回调例程:
_Use_decl_annotations_
VOID
MyCsqReleaseLock(
PIO_CSQ Csq,
KIRQL Irql
)
{
// Function body
}
IO_CSQ_RELEASE_LOCK函数类型在 Wdm.h 头文件中定义。 若要在运行代码分析工具时更准确地识别错误,请务必将 _Use_decl_annotations_
注释添加到函数定义。
_Use_decl_annotations_
批注可确保使用应用于头文件中IO_CSQ_RELEASE_LOCK函数类型的批注。 有关函数声明要求的详细信息,请参阅 使用 WDM 驱动程序的函数角色类型来声明函数。 有关 _Use_decl_annotations_
的信息,请参阅 批注函数行为。
要求
要求 | 价值 |
---|---|
目标平台 | 桌面 |
标头 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |