IRP_MJ_SET_INFORMATION (FS 和筛选器驱动程序)

发送时

I/O 管理器、其他操作系统组件和其他内核模式驱动程序发送IRP_MJ_SET_INFORMATION请求。 例如,当用户模式应用程序调用了 Win32 函数(如 SetEndOfFile )或内核模式组件调用 ZwSetInformationFile 时,可以发送它。

操作:文件系统驱动程序

文件系统驱动程序应提取和解码文件对象,以确定它是表示用户文件还是目录打开。 如果存在,则文件系统驱动程序应根据需要处理请求并完成 IRP。

可以在 文件和 目录上设置以下类型的信息:

  • FileBasicInformation
  • FileDispositionInformation
  • FileLinkInformation (,适用于允许在目录层次结构中创建周期的文件系统)
  • FilePositionInformation
  • FileRenameInformation

只能对文件设置以下类型的信息:

  • FileAllocationInformation
  • FileEndOfFileInformation
  • FileLinkInformation:对于 (文件系统,例如,不允许在目录层次结构中创建周期的 NTFS)
  • FileValidDataLengthInformation

操作:旧版文件系统筛选器驱动程序

筛选器驱动程序必须将此 IRP 向下传递到堆栈上下一个较低级别的驱动程序。

参数

文件系统或筛选器驱动程序调用给定 IRP 的 IoGetCurrentIrpStackLocation ,以获取指向 IRP 中其自身堆栈位置的指针。 在以下参数中, Irp 指向 IRP而 IrpSp 指向 IO_STACK_LOCATION。 驱动程序可以使用 IRP 的以下成员和 IRP 堆栈位置中设置的信息来处理集文件信息请求:

  • DeviceObject 是指向目标设备对象的指针。

  • Irp->AssociatedIrp.SystemBuffer 指向包含要设置的文件或目录信息的输入缓冲区。 此信息存储在以下结构之一中:

  • Irp->IoStatus 指向一个 IO_STATUS_BLOCK 结构,该结构接收最终完成状态和有关所请求操作的信息。 有关详细信息,请参阅 ZwSetInformationFileIoStatusBlock 参数的说明。

  • IrpSp->FileObject 指向与 DeviceObject 关联的文件对象。 此参数包含指向 RelatedFileObject 字段的指针,该字段也是FILE_OBJECT结构。 FILE_OBJECT 结构的 RelatedFileObject 字段在处理IRP_MJ_SET_INFORMATION期间无效,不应使用。

  • IrpSp->MajorFunction* 设置为 IRP_MJ_SET_INFORMATION。

  • IrpSp->Irp-Parameters.SetFile.FileInformationClass>FileValidDataLengthInformation 时,可以IRP_MN_KERNEL_CALL MinorFunction*。 此代码指示请求的源是受信任的内核组件,允许驱动程序绕过安全检查。

  • IrpSp->Parameters.SetFile.AdvanceOnly 是文件结束操作的标志。 当 FileInformationClassFileEndOfFileInformation 时,此标志确定 EndOfFile 成员FILE_END_OF_FILE_INFORMATION结构的使用。 如果 为 TRUE,则仅当文件增加当前有效数据长度时,才会从 EndOfFile 设置新的有效数据长度。 如果 为 FALSE,则从 EndOfFile 设置新的文件大小。

  • IrpSp->Parameters.SetFile.ClusterCount 保留供系统使用。

  • IrpSp->Parameters.SetFile.DeleteHandle 保留供系统使用。

  • IrpSp->Parameters.SetFile.FileInformationClass 指示要为文件设置的信息类型,可以是以下值之一。

    含义
    FileAllocationInformation 设置 文件的FILE_ALLOCATION_INFORMATION
    FileBasicInformation 设置 文件的FILE_BASIC_INFORMATION
    FileDispositionInformation 设置 文件的FILE_DISPOSITION_INFORMATION
    FileEndOfFileInformation 设置 文件的FILE_END_OF_FILE_INFORMATION
    FileLinkInformation 设置 文件的FILE_LINK_INFORMATION
    FilePositionInformation 设置 文件的FILE_POSITION_INFORMATION
    FileRenameInformation 设置 文件的FILE_RENAME_INFORMATION
    FileValidDataLengthInformation 设置 文件的FILE_VALID_DATA_LENGTH_INFORMATION 。 有关详细信息,请参阅 Irp-MinorFunction>
  • IrpSp->Parameters.SetFile.FileObject 用于重命名或链接操作。 如果 Irp-AssociatedIrp.SystemBuffer-FileName>> 包含完全限定的文件名,或者 Irp-AssociatedIrp.SystemBuffer-RootDirectory>> 为非 NULL,则此成员是作为操作目标的文件的父目录的文件对象指针。 否则为 NULL

  • IrpSp->Parameters.SetFile.LengthIrp-AssociatedIrp.SystemBuffer> 指向的缓冲区的长度(以字节为单位)。

  • IrpSp->Parameters.SetFile.ReplaceIfExists 设置为 TRUE 以指定如果已存在同名的文件,则应将其替换为给定的文件。 如果已存在具有给定名称的文件,则重命名操作应失败,则设置为 FALSE

注解

缓存管理器将 AdvanceOnly 成员设置为 TRUE ,以通知文件系统将磁盘上的当前有效数据长度提升到 EndOfFile 中新的有效数据长度。 如果 AdvanceOnlyFALSE,则将设置 EndOfFile 成员中的新文件大小,该大小可以大于或小于当前文件大小。

另请参阅

FILE_ALLOCATION_INFORMATION

FILE_BASIC_INFORMATION

FILE_DISPOSITION_INFORMATION

FILE_END_OF_FILE_INFORMATION

FILE_LINK_INFORMATION

FILE_POSITION_INFORMATION

FILE_RENAME_INFORMATION

FILE_VALID_DATA_LENGTH_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_QUERY_INFORMATION

ZwSetInformationFile