IoReleaseRemoveLockAndWait 宏 (wdm.h)
IoReleaseRemoveLockAndWait 例程释放驱动程序在上一次调用 IoAcquireRemoveLock 中获取的删除锁,并等待,直到释放所有获取的锁。
语法
void IoReleaseRemoveLockAndWait(
[in] RemoveLock,
[in] Tag
);
参数
[in] RemoveLock
指向调用方在上一次对 IoAcquireRemoveLock 的调用中传递的IO_REMOVE_LOCK结构的指针。
[in] Tag
指向调用方提供的标记的指针,该标记是在对 IoAcquireRemoveLock 的上一次调用中传递的。
如果驱动程序在获取锁时指定了 Tag ,则驱动程序在释放锁时必须指定相同的 Tag 。
如果对 IoAcquireRemoveLock 的调用未指定 Tag,则此参数为 NULL。
返回值
无
备注
驱动程序通常在其调度代码中为 IRP_MN_REMOVE_DEVICE 请求调用此例程。 若要允许完成排队的 I/O 请求,每个驱动程序应在将删除 IRP 传递给下一个较低的驱动程序后调用 IoReleaseRemoveLockAndWait,并在它释放内存之前调用 IoDetachDevice 或调用 IoDeleteDevice。 IoReleaseRemoveLockAndWait 例程等待总线驱动程序取消任何可能未完成的 IRP (例如,IRP_MN_WAIT_WAKE 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) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 符合性规则 | IoReleaseRemoveLockAndWaitOutsideRemoveDevice (wdm) , RemoveLock (wdm) , RemoveLockCheck (wdm) , RemoveLockMnRemove (wdm) , RemoveLockMnRemove2 (wdm) , RemoveLockReleaseCleanup (wdm) 、 RemoveLockReleaseClose (wdm) 、 RemoveLockReleaseCreate (wdm) 、 RemoveLockReleaseDeviceControl (wdm) 、 RemoveLockReleaseInternalDeviceControl (wdm) 、 RemoveLockReleasePower (wdm) 、 RemoveLockReleaseRead (wdm) 、 RemoveLockReleaseShutdown (wdm) 、 RemoveLockReleaseSystemControl (wdm) 、 RemoveLockReleaseWrite (wdm) |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈