IoInitializeRemoveLock 宏 (wdm.h)
IoInitializeRemoveLock 例程初始化设备对象的删除锁。
语法
void IoInitializeRemoveLock(
[in] Lock,
[in] Tag,
[in] Maxmin,
[in] HighWater
);
参数
[in] Lock
指向调用方提供的 IO_REMOVE_LOCK 结构的指针,此例程使用有关锁的信息(包括计数器和同步事件)进行初始化。 驱动程序编写器必须将此结构分配为设备对象的设备扩展的一部分。
[in] Tag
指定一个标记,用于标识锁的创建者。 驱动程序编写器通常使用反向顺序指定的 4 个字符字符串,例如用于 ExAllocatePoolWithTag的标记。
如果启用了 驱动程序验证程序,I/O 系统将使用此参数。 调用方应始终为此参数提供非零标记值。
[in] Maxmin
指定此锁应保留的最大分钟数。 值为零表示没有限制。 此值通常在调试期间用于标识保留锁时间超过预期的驱动程序例程。
如果启用了驱动程序验证程序,I/O 系统将使用此参数。
[in] HighWater
指定锁上允许的最大未完成购置次数。 使用 0 指定最大值。 HighWatermark 必须 <= 0x7FFFFFFF。
如果启用了驱动程序验证程序,I/O 系统将使用此参数。
返回值
没有
言论
驱动程序可以使用删除锁跟踪设备上的未完成 I/O作,并确定驱动程序何时可以删除其设备对象以响应 IRP_MN_REMOVE_DEVICE 请求。
在调用 IoInitializeRemoveLock之前,驱动程序应在其 设备扩展中分配 IO_REMOVE_LOCK 结构。 驱动程序通常会在其 AddDevice 例程中调用 IoInitializeRemoveLock,当驱动程序初始化设备对象的其余设备扩展时。
IoReleaseRemoveLockAndWait 例程返回后,驱动程序应考虑设备处于已准备好删除的状态,并且无法执行 I/O作。 因此,驱动程序不得调用 IoInitializeRemoveLock 以重新初始化删除锁。 驱动程序验证程序 验证驱动程序时违反此规则将导致 bug 检查。
由于驱动程序将 IO_REMOVE_LOCK 结构存储在设备对象的设备扩展中,因此当驱动程序删除设备扩展作为处理 IRP_MN_REMOVE_DEVICE 请求的一部分时,删除删除锁。
有关详细信息,请参阅 使用删除锁。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 从 Windows 2000 开始可用。 |
目标平台 | 桌面 |
标头 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |