IoReleaseRemoveLockAndWait 宏 (wdm.h)
IoReleaseRemoveLockAndWait 例程释放了在之前调用 IoAcquireRemoveLock中获取的驱动程序获取的删除锁,并等待所有获取锁。
语法
void IoReleaseRemoveLockAndWait(
[in] RemoveLock,
[in] Tag
);
参数
[in] RemoveLock
指向调用方在上一次调用中传递给 IoAcquireRemoveLock的 IO_REMOVE_LOCK 结构的指针。
[in] Tag
指向在上一次调用中传递给 IoAcquireRemoveLock的调用方提供的标记的指针。
如果驱动程序在获取锁时指定了 标记,则驱动程序在释放锁时必须指定相同的 标记。
如果调用 IoAcquireRemoveLock 未指定 标记,则此参数 NULL。
返回值
没有
言论
驱动程序通常在其调度代码中为 IRP_MN_REMOVE_DEVICE 请求调用此例程。 若要允许排队的 I/O 请求完成,每个驱动程序应在 将删除 IRP 传递给下一个较低驱动程序后调用
驱动程序必须先获取删除锁,然后才能调用 IoReleaseRemoveLockAndWait。 通常,驱动程序在 switch 语句之前在其 DispatchPnp 例程中调用 IoAcquireRemoveLock。 因此,为每个 PnP 操作获取锁,包括在处理 IRP_MN_REMOVE_DEVICE的代码中调用 IoReleaseRemoveLockAndWait 之前所需的获取。
若要从 IRP_MN_REMOVE_DEVICE 调度代码以外的代码中释放锁,请使用 IoReleaseRemoveLock。
IoReleaseRemoveLockAndWait 调用特定删除锁后,对同一删除锁 IoAcquireRemoveLock 的后续调用将失败。 IoReleaseRemoveLockAndWait 在释放删除锁的所有未完成收购之前不会返回。
IoReleaseRemoveLockAndWait 返回后,驱动程序应考虑设备处于已准备好删除的状态,并且无法执行 I/O 操作。 因此,驱动程序不得调用 IoInitializeRemoveLock 例程来重新初始化删除锁。 驱动程序验证程序 验证驱动程序时违反此规则将导致 bug 检查。
有关详细信息,请参阅 使用删除锁。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 从 Windows 2000 开始可用。 |
目标平台 | 桌面 |
标头 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 符合性规则 |