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 是要锁定或解锁的字节范围的长度(以字节为单位)。

另请参阅

FltProcessFileLock

FsRtlProcessFileLock

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP