zwSetInformationFile 函数 (wdm.h)

ZwSetInformationFile 例程更改有关文件对象的各种类型的信息。

语法

NTSYSAPI NTSTATUS ZwSetInformationFile(
  [in]  HANDLE                 FileHandle,
  [out] PIO_STATUS_BLOCK       IoStatusBlock,
  [in]  PVOID                  FileInformation,
  [in]  ULONG                  Length,
  [in]  FILE_INFORMATION_CLASS FileInformationClass
);

参数

[in] FileHandle

文件对象的句柄。 此句柄是通过成功调用 ZwCreateFileZwOpenFile 创建的。

[out] IoStatusBlock

指向 IO_STATUS_BLOCK 结构的指针,该结构接收最终完成状态和有关所请求操作的信息。 Information 成员接收文件上设置的字节数。

[in] FileInformation

指向缓冲区的指针,该缓冲区包含要为文件设置的信息。 此缓冲区中的特定结构由 FileInformationClass 参数确定。 例如,如果将 FileInformationClass 参数设置为 FileDispositionInformationEx 常量,则此参数应是指向 FILE_DISPOSITION_INFORMATION_EX 结构的指针。

[in] Length

FileInformation 缓冲区的大小(以字节为单位)。

[in] FileInformationClass

FileInformation 指向的缓冲区中提供的信息类型,要为文件设置。 设备和中间驱动程序可以指定以下 任何FILE_INFORMATION_CLASS 值。

FileInformationClass 价值 含义
FileBasicInformation 更改 FILE_BASIC_INFORMATION 结构中提供的信息。 调用方必须已打开文件,并在 DesiredAccess 参数中设置了FILE_WRITE_ATTRIBUTES标志。
FileDispositionInformation 请求在文件关闭时删除文件或取消以前请求的删除。 FILE_DISPOSITION_INFORMATION 结构中 提供了是删除还是取消的选项。 调用方必须已使用 DesiredAccess 参数中设置的 DELETE 标志打开文件。
FileDispositionInformationEx 请求删除文件或取消以前请求的删除。 FILE_DISPOSITION_INFORMATION_EX 结构中 提供了是删除还是取消选项,以及何时以及如何执行删除的设置。 调用方必须已使用 DesiredAccess 参数中设置的 DELETE** 标志打开文件。
FileEndOfFileInformation 更改 FILE_END_OF_FILE_INFORMATION结构中 提供的当前文件结束信息。 该操作可以截断或扩展文件。 调用方必须已使用 DesiredAccess 参数中设置的 FILE_WRITE_DATA 标志打开文件。
FileIoPriorityHintInformation 更改文件句柄的当前默认 IRP 优先级提示。 新值以 FILE_IO_PRIORITY_HINT_INFORMATION 结构提供。 此结构必须对齐 8 字节。
FileLinkInformation 创建指向现有文件的硬链接,该文件在 FILE_LINK_INFORMATION 结构中指定。 并非所有文件系统都支持硬链接;例如,NTFS 会执行 ,而 FAT 则不这样做。
FilePositionInformation 更改存储在 FILE_POSITION_INFORMATION 结构中的当前文件信息。
FileRenameInformation 更改 FILE_RENAME_INFORMATION结构中 提供的当前文件名。 调用方必须对文件具有 DELETE 访问权限。
FileShortNameInformation 更改 FILE_NAME_INFORMATION结构中 提供的当前短文件名。 该文件必须位于 NTFS 卷上,并且调用方必须已打开文件,并在 DesiredAccess 参数中设置了 DesiredAccess DELETE 标志。
FileValidDataLengthInformation 更改文件的当前有效数据长度,该文件在 FILE_VALID_DATA_LENGTH_INFORMATION 结构中提供。 该文件必须位于 NTFS 卷上,并且调用方必须已使用 DesiredAccess 参数中设置的 FILE_WRITE_DATA 标志打开该文件。 非管理员和远程用户必须具有 SeManageVolumePrivilege 特权。
FileReplaceCompletionInformation 更改或删除指定文件句柄的 I/O 完成端口。 调用方提供指向 FILE_COMPLETION_INFORMATION 结构的指针,该结构指定端口句柄和完成键。 如果端口句柄为非 NULL,则此句柄指定要与文件句柄关联的新 I/O 完成端口。 若要删除与文件句柄关联的 I/O 完成端口,请将 结构中的端口句柄设置为 NULL。 若要获取端口句柄,用户模式调用方可以调用 CreateIoCompletionPort 函数。

返回值

ZwSetInformationFile 返回STATUS_SUCCESS或适当的错误状态。

注解

ZwSetInformationFile 更改有关文件的信息。 它忽略特定设备或文件系统不支持 的 FILE_XXX_INFORMATION 结构的任何成员。

如果将 FileInformationClass 设置为 FileDispositionInformation,则可以随后将 FileHandle 传递到 ZwClose, 但不能传递到任何其他 ZwXxxFile 例程。 由于 FileDispositionInformation 导致文件被标记为要删除,因此尝试对句柄执行任何后续操作(而不是关闭它)是一个编程错误。

如果将 FileInformationClass 设置为 FilePositionInformation,并且前面对 ZwCreateFile 的调用在 CreateOptions 参数中包含 FILE_NO_INTERMEDIATE_BUFFERING 标志,则会对 FILE_POSITION_INFORMATION 结构的 CurrentByteOffset 成员强制执行某些限制。 有关详细信息,请参阅 ZwCreateFile

如果将 FileInformationClass 设置为 FileEndOfFileInformation,并且 FILE_END_OF_FILE_INFORMATIONEndOfFile 成员指定了超出当前文件结束标记的偏移量,则 ZwSetInformationFile 将扩展文件并将扩展名填充为零。

有关使用文件的详细信息,请参阅 在驱动程序中使用文件

ZwSetInformationFile 的调用方必须在 IRQL = PASSIVE_LEVEL 且启用了特殊内核 APC 的情况下运行。

如果在用户模式下调用此函数,则应使用名称“NtSetInformationFile”而不是“ZwSetInformationFile”。

对于来自内核模式驱动程序的调用,Windows Native System Services 例程的 NtXxxZwXxx 版本在处理和解释输入参数的方式上的行为可能有所不同。 有关例程的 NtXxxZwXxx 版本之间的关系的详细信息,请参阅 使用本机系统服务例程的 Nt 和 Zw 版本

要求

要求
目标平台 通用
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL (请参阅“备注”部分)
DDI 符合性规则 HwStorPortProhibitedDDI (storport) PowerIrpDDis (wdm)

另请参阅

CreateIoCompletionPort

FILE_BASIC_INFORMATION

FILE_COMPLETION_INFORMATION

FILE_DISPOSITION_INFORMATION

FILE_END_OF_FILE_INFORMATION

FILE_IO_PRIORITY_HINT_INFORMATION

FILE_LINK_INFORMATION

FILE_NAME_INFORMATION

FILE_POSITION_INFORMATION

FILE_RENAME_INFORMATION

FILE_VALID_DATA_LENGTH_INFORMATION

使用本机系统服务例程的 Nt 和 Zw 版本

ZwClose

ZwCreateFile

ZwOpenFile

ZwQueryInformationFile