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)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

另请参阅

IoAcquireRemoveLock

IoInitializeRemoveLock

IoReleaseRemoveLock

IoReleaseRemoveLockAndWait