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 结构,该结构接收最终完成状态和有关所请求操作的信息。 有关详细信息,请参阅 ZwSetInformationFile 中 IoStatusBlock 参数的说明。
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 是文件结束操作的标志。 当 FileInformationClass 为 FileEndOfFileInformation 时,此标志确定 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.Length 是 Irp-AssociatedIrp.SystemBuffer> 指向的缓冲区的长度(以字节为单位)。
IrpSp->Parameters.SetFile.ReplaceIfExists 设置为 TRUE 以指定如果已存在同名的文件,则应将其替换为给定的文件。 如果已存在具有给定名称的文件,则重命名操作应失败,则设置为 FALSE 。
注解
缓存管理器将 AdvanceOnly 成员设置为 TRUE ,以通知文件系统将磁盘上的当前有效数据长度提升到 EndOfFile 中新的有效数据长度。 如果 AdvanceOnly 为 FALSE,则将设置 EndOfFile 成员中的新文件大小,该大小可以大于或小于当前文件大小。
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈