IRP_MJ_LOCK_CONTROL (FS 和筛选器驱动程序)
发送时
I/O 管理器、其他操作系统组件和其他内核模式驱动程序发送IRP_MJ_LOCK_CONTROL请求。
操作:文件系统驱动程序
文件系统驱动程序应提取和解码文件对象,以确定目标设备对象是否为文件系统的控制设备对象。 如果是这样,文件系统驱动程序应根据需要完成 IRP,而无需处理锁定请求。
否则,如果请求已在表示打开的用户文件的句柄上发出,则文件系统驱动程序应执行次要函数代码指示的操作并完成 IRP。 否则,驱动程序应使 IRP 失败。
下面是有效的次要函数代码:
代码 | 说明 |
---|---|
IRP_MN_LOCK | 指示字节范围锁定请求,可能代表调用 Win32 LockFile 函数的用户模式应用程序。 |
IRP_MN_UNLOCK_ALL | 指示释放文件的所有字节范围锁的请求,通常是因为文件对象的最后一个未完成句柄正在关闭。 |
IRP_MN_UNLOCK_ALL_BY_KEY | 指示释放具有指定键值的所有字节范围锁的请求。 |
IRP_MN_UNLOCK_SINGLE | 指示释放单字节范围锁的请求,可能代表调用 Win32 UnlockFile 函数的用户模式应用程序。 |
操作:旧版文件系统筛选器驱动程序
执行任何所需的处理后,文件系统筛选器驱动程序应将 IRP 向下传递到堆栈上的下一个较低驱动程序。
参数
文件系统或筛选器驱动程序使用给定的 IRP 调用 IoGetCurrentIrpStackLocation ,以获取指向 IRP 中自己的 堆栈位置 的指针,如以下列表所示为 IrpSp。 (IRP 显示为 Irp.) 驱动程序可以使用 IRP 的以下成员和 IRP 堆栈位置中设置的信息来处理锁控制请求:
DeviceObject 是指向目标设备对象的指针。
Irp->IoStatus 指向一个 IO_STATUS_BLOCK 结构,该结构接收最终完成状态和有关所请求操作的信息。
IrpSp->FileObject 指向与 DeviceObject 关联的文件对象。
IrpSp-FileObject> 参数包含指向 RelatedFileObject 字段的指针,该字段也是FILE_OBJECT结构。 FILE_OBJECT 结构的 RelatedFileObject 字段在处理IRP_MJ_LOCK_CONTROL期间无效,不应使用。
IrpSp->标志 可以是以下一个或多个值:
标志 | 含义 |
---|---|
SL_EXCLUSIVE_LOCK | 如果设置了此标志,则会请求独占字节范围锁。 否则,将请求共享锁。 |
SL_FAIL_IMMEDIATELY | 如果设置了此标志,如果无法立即授予锁定请求,则锁定请求应会失败。 |
IrpSp->MajorFunction 设置为 IRP_MJ_LOCK_CONTROL。
IrpSp->MinorFunction 设置为以下值之一:
- IRP_MN_LOCK
- IRP_MN_UNLOCK_ALL
- IRP_MN_UNLOCK_ALL_BY_KEY
- IRP_MN_UNLOCK_SINGLE
IrpSp->Parameters.LockControl.ByteOffset 是要锁定或解锁的字节范围文件中的起始字节偏移量。
IrpSp->Parameters.LockControl.Key 是字节范围锁的键。
IrpSp->Parameters.LockControl.Length 是要锁定或解锁的字节范围的长度(以字节为单位)。
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈