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

另请参阅

IoAcquireRemoveLock

IoInitializeRemoveLock

IoReleaseRemoveLock

IoReleaseRemoveLockAndWait