NtCreateFile 函数 (ntifs.h)

NtCreateFile 例程创建新文件或打开现有文件。

语法

__kernel_entry NTSYSCALLAPI NTSTATUS NtCreateFile(
  [out]          PHANDLE            FileHandle,
  [in]           ACCESS_MASK        DesiredAccess,
  [in]           POBJECT_ATTRIBUTES ObjectAttributes,
  [out]          PIO_STATUS_BLOCK   IoStatusBlock,
  [in, optional] PLARGE_INTEGER     AllocationSize,
  [in]           ULONG              FileAttributes,
  [in]           ULONG              ShareAccess,
  [in]           ULONG              CreateDisposition,
  [in]           ULONG              CreateOptions,
  [in, optional] PVOID              EaBuffer,
  [in]           ULONG              EaLength
);

参数

[out] FileHandle

指向 HANDLE 变量的指针,该变量接收文件的句柄。

[in] DesiredAccess

指定一个 ACCESS_MASK 值,该值确定请求对对象的访问。

除了为所有类型的对象定义的 标准 访问权限外,调用方还可以指定以下任何 特定的 访问权限;即特定于文件的权限。

ACCESS_MASK标志 允许调用方执行此操作
FILE_READ_DATA 从文件读取数据。
FILE_READ_ATTRIBUTES 读取文件的属性。 有关详细信息,请参阅 FileAttributes 参数的说明。
FILE_READ_EA 读取文件的扩展属性(EA)。 此标志与设备和中间驱动程序无关。
FILE_WRITE_DATA 将数据写入文件。
FILE_WRITE_ATTRIBUTES 写入文件的属性。 有关详细信息,请参阅 FileAttributes 参数的说明。
FILE_WRITE_EA 更改文件的扩展属性(EA)。 此标志与设备和中间驱动程序无关。
FILE_APPEND_DATA 将数据追加到文件。
FILE_EXECUTE 使用系统分页 I/O 将数据从文件读取到内存中。 此标志与设备和中间驱动程序无关。

注意

创建或打开目录时,请勿指定FILE_READ_DATA、FILE_WRITE_DATA、FILE_APPEND_DATA或FILE_EXECUTE。

调用方还可以指定以下 泛型 访问权限(适用于所有对象类型的权限,其中每个泛型访问权限的含义特定于对象类型)。 文件对象的通用访问权限对应于特定的访问权限,如下表所示。 (请注意,“correspond”表示“映射到”,并不表示泛型权限的值“等于”其特定权限映射的按位 OR 的值)。 I/O 管理器定义实际映射。

通用访问权限 映射到这些特定的访问权限
GENERIC_READ STANDARD_RIGHTS_READ、FILE_READ_DATA、FILE_READ_ATTRIBUTES、FILE_READ_EA 和 SYNCHRONIZE
GENERIC_WRITE STANDARD_RIGHTS_WRITE、FILE_WRITE_DATA、FILE_WRITE_ATTRIBUTES、FILE_WRITE_EA、FILE_APPEND_DATA 和 SYNCHRONIZE
GENERIC_EXECUTE STANDARD_RIGHTS_EXECUTE、FILE_EXECUTE、FILE_READ_ATTRIBUTES 和 SYNCHRONIZE。 此值与设备和中间驱动程序无关。
GENERIC_ALL FILE_ALL_ACCESS

注意

只能为文件指定 泛型 访问权限;不能为目录指定它们。

某些 CreateOptions 标志要求在调用 NtCreateFile 时,DesiredAccess 中设置某些访问标志。 有关这些详细信息,请参阅 CreateOptions 参数。

例如,如果为文件对象指定GENERIC_READ,则例程会将此值映射到特定访问权限的FILE_GENERIC_READ位掩码。 在上表中,为GENERIC_READ列出的特定访问权限对应于FILE_GENERIC_READ位掩码中包含的访问标志(但不等于)。

如果文件实际上是一个目录,调用方还可以指定以下泛型访问权限。

DesiredAccess 标志 允许调用方执行此操作
FILE_LIST_DIRECTORY 列出目录中的文件。
FILE_TRAVERSE 换句话说,遍历目录,将目录包含在文件的路径中。

有关访问权限的详细信息,请参阅 ACCESS_MASK访问权限

[in] ObjectAttributes

指向指定对象名称和其他属性的 OBJECT_ATTRIBUTES 结构的指针。 使用 InitializeObjectAttributes 初始化此结构。 如果调用方未在系统线程上下文中运行,则必须在调用 InitializeObjectAttributes时设置OBJ_KERNEL_HANDLE属性。

[out] IoStatusBlock

指向 IO_STATUS_BLOCK 结构的指针,该结构接收最终完成状态以及有关请求的操作的其他信息。 特别是,信息 成员接收以下值之一:

  • FILE_CREATED
  • FILE_OPENED
  • FILE_OVERWRITTEN
  • FILE_SUPERSEDED
  • FILE_EXISTS
  • FILE_DOES_NOT_EXIST

[in, optional] AllocationSize

指向包含创建或覆盖的文件的初始分配大小(以字节为单位)的LARGE_INTEGER的指针。 如果 AllocationSizeNULL,则不指定分配大小。 如果未创建或覆盖任何文件,则忽略 AllocationSize

[in] FileAttributes

指定一个或多个 FILE_ATTRIBUTE_XXX 标志,表示创建或覆盖文件时要设置的文件属性。 调用方通常指定FILE_ATTRIBUTE_NORMAL,用于设置默认属性。 有关有效FILE_ATTRIBUTE_XXX 标志的列表,请参阅 Microsoft Windows SDK 文档中的 CreateFile 例程。 如果未创建或覆盖任何文件,则忽略 FileAttributes

[in] ShareAccess

共享访问的类型,指定为零或以下标志的任意组合。

ShareAccess 标志 允许其他线程执行此操作
FILE_SHARE_READ 读取文件
FILE_SHARE_WRITE 写入文件
FILE_SHARE_DELETE 删除文件

设备和中间驱动程序通常将 ShareAccess 设置为零,这为调用方提供对打开文件的独占访问权限。

[in] CreateDisposition

指定在文件不存在或不存在时要执行的操作。 CreateDisposition 可以是下表中的值之一。

CreateDisposition 如果存在文件,则执行操作 如果文件不存在,则执行操作
FILE_SUPERSEDE 替换文件。 创建文件。
FILE_CREATE 返回错误。 创建文件。
FILE_OPEN 打开该文件。 返回错误。
FILE_OPEN_IF 打开该文件。 创建文件。
FILE_OVERWRITE 打开该文件并覆盖该文件。 返回错误。
FILE_OVERWRITE_IF 打开该文件并覆盖该文件。 创建文件。

[in] CreateOptions

指定驱动程序创建或打开文件时要应用的选项。 使用下表中的一个或多个标志。

CreateOptions 标志 意义
FILE_DIRECTORY_FILE(0x00000001) 该文件是一个目录。 FILE_SYNCHRONOUS_IO_ALERT、FILE_SYNCHRONOUS_IO_NONALERT、FILE_WRITE_THROUGH、FILE_OPEN_FOR_BACKUP_INTENT和FILE_OPEN_BY_FILE_ID CreateOptions 标志兼容。 createDisposition 参数 必须设置为FILE_CREATE、FILE_OPEN或FILE_OPEN_IF。
FILE_WRITE_THROUGH(0x00000002) 将数据写入文件的系统服务、文件系统驱动程序和驱动程序必须实际将数据传输到文件,然后再考虑完成任何请求的写入操作。
FILE_SEQUENTIAL_ONLY(0x00000004) 对文件的所有访问都是按顺序进行的。
FILE_NO_INTERMEDIATE_BUFFERING(0x00000008) 文件不能缓存或缓冲在驱动程序的内部缓冲区中。 此标志与 DesiredAccess 参数的FILE_APPEND_DATA标志不兼容。
FILE_SYNCHRONOUS_IO_ALERT(0x00000010) 对文件执行的所有操作都是同步执行的。 代表调用方的任何等待都受到警报的过早终止。 此标志还会导致 I/O 系统维护文件位置指针。 如果设置了此标志,则必须在 DesiredAccess 参数中设置 SYNCHRONIZE 标志。
FILE_SYNCHRONOUS_IO_NONALERT(0x00000020) 对文件执行的所有操作都是同步执行的。 在系统中等待同步 I/O 队列和完成不受警报约束。 此标志还会导致 I/O 系统维护文件位置上下文。 如果设置了此标志,则必须在 DesiredAccess 参数中设置 SYNCHRONIZE 标志。
FILE_NON_DIRECTORY_FILE(0x00000040) 该文件 目录。 要打开的文件对象可以表示数据文件;逻辑设备、虚拟设备或物理设备;或卷。 从 Windows 11 版本 24H2 开始,NTFS 现在在打开 $INDEX_ALLOCATION 属性时遵循此标志。
FILE_CREATE_TREE_CONNECTION(0x00000080) 为此文件创建树连接,以便通过网络将其打开。 设备和中间驱动程序不使用此标志。
FILE_COMPLETE_IF_OPLOCKED(0x00000100) 如果目标文件已锁定,而不是阻止调用方线程,请立即使用备用成功代码STATUS_OPLOCK_BREAK_IN_PROGRESS完成此操作。 如果文件已锁定,则另一个调用方已有权访问该文件。 设备和中间驱动程序不使用此标志。
FILE_NO_EA_KNOWLEDGE(0x00000200) 如果打开现有文件的扩展属性(EA)指示调用方必须了解 EA 才能正确解释文件,NtCreateFile 应返回错误。 此标志与设备和中间驱动程序无关。
FILE_OPEN_REMOTE_INSTANCE(0x00000400) 保留供系统使用;请勿使用。
FILE_RANDOM_ACCESS(0x00000800) 对文件的访问权限可以是随机的,因此文件系统驱动程序或系统不应执行顺序预读操作。
FILE_DELETE_ON_CLOSE(0x00001000) 将文件的最后一个句柄传递给 NtClose时,系统会删除该文件。 如果设置了此标志,则必须在 DesiredAccess 参数中设置 DELETE 标志。
FILE_OPEN_BY_FILE_ID(0x00002000) ObjectAttributes 参数指定的文件名包括文件的二进制 8 字节或 16 字节文件引用编号或对象 ID,具体取决于文件系统。 (可选)设备名称后跟反斜杠字符可能会继续这些二进制值。 有关更多详细信息和示例,请参阅“备注”。
FILE_OPEN_FOR_BACKUP_INTENT(0x00004000) 文件正在打开以供备份意向使用。 因此,在根据文件的安全描述符检查 DesiredAccess 参数之前,系统应检查某些访问权限并向调用方授予对文件的适当访问权限。 设备和中间驱动程序不使用此标志。
FILE_NO_COMPRESSION(0x00008000) 禁止从父目录继承FILE_ATTRIBUTE_COMPRESSED。 这允许在标记为压缩的目录中创建非压缩文件。
FILE_OPEN_REQUIRING_OPLOCK(0x00010000) 文件正在打开,文件上的机会锁(oplock)正在请求为单个原子操作。 文件系统在执行创建操作之前检查 oplock,如果结果将中断现有 oplock,则创建时将失败并返回STATUS_CANNOT_BREAK_OPLOCK代码STATUS_CANNOT_BREAK_OPLOCK。 此标志从 Windows 7 和 Windows Server 2008 R2 开始可用。
FILE_DISALLOW_EXCLUSIVE(0x00020000) 打开现有文件时,如果未指定FILE_SHARE_READ,并且文件系统访问检查不会授予调用方对该文件的写入访问权限,则此打开失败并STATUS_ACCESS_DENIED。 这是 Windows 7 之前的默认行为。 此标志从 Windows 7 和 Windows Server 2008 R2 开始可用。
FILE_SESSION_AWARE(0x00040000) 打开文件或设备的客户端知道会话,并在必要时验证每个会话访问。 此标志从 Windows 8 开始可用。
FILE_RESERVE_OPFILTER(0x00100000) 此标志允许应用程序请求筛选器机会锁(oplock),以防止其他应用程序收到共享冲突。 如果已打开句柄,则创建请求将失败并STATUS_OPLOCK_NOT_GRANTED。 有关详细信息,请参阅以下“备注”部分。
FILE_OPEN_REPARSE_POINT(0x00200000) 使用重新分析点打开文件,并绕过文件的正常重新分析点处理。 有关详细信息,请参阅以下“备注”部分。
FILE_OPEN_NO_RECALL(0x00400000) 指示执行脱机存储或虚拟化的任何筛选器不会由于此打开而召回文件的内容。
FILE_OPEN_FOR_FREE_SPACE_QUERY (0x00800000) 此标志指示文件系统捕获与调用线程关联的用户。 使用返回的句柄对 FltQueryVolumeInformation 或 ZwQueryVolumeInformationFile 的任何后续调用都将假定捕获的用户(而不是调用用户)用于计算调用方可用的可用空间。 这适用于以下 FsInformationClass 值:FileFsSizeInformation、FileFsFullSizeInformation 和 FileFsFullSizeInformationEx。
FILE_CONTAINS_EXTENDED_CREATE_INFORMATION(0x10000000) EaBuffer 参数解释为 EXTENDED_CREATE_INFORMATION实例。 从 Windows 11 版本 22H2 开始,此标志可用。

[in, optional] EaBuffer

对于设备和中间驱动程序,此参数必须是 NULL 指针。

[in] EaLength

对于设备和中间驱动程序,此参数必须为零。

返回值

NtCreateFile 在成功或失败时返回相应的 NTSTATUS 错误代码STATUS_SUCCESS。 在后一种情况下,调用方可以通过检查 IoStatusBlock 参数来确定失败的原因。

注意

NtCreateFile 可能会返回STATUS_FILE_LOCK_CONFLICT作为返回值或在 IoStatusBlock 参数指向的 IO_STATUS_BLOCK 结构的 状态 成员中。 仅当 NTFS 日志文件已满并且 NtCreateFile 尝试处理这种情况时,才会发生此错误。

言论

NtCreateFile 提供调用方可用于操作文件数据或文件对象的状态和属性的句柄。 有关详细信息,请参阅 在驱动程序中使用文件。

FileHandle 指向的句柄不再使用后,驱动程序必须调用 NtClose 将其关闭。

如果调用方未在系统线程上下文中运行,则必须确保创建的任何句柄都是专用句柄。 否则,该句柄可由运行驱动程序的上下文的进程访问。 有关详细信息,请参阅 对象句柄

可通过两种替代方法指定要创建或打开的文件的名称,NtCreateFile

  • 作为完全限定的路径名,在输入 ObjectAttributes 的 ObjectName 成员中提供。
  • 作为路径名相对于由输入 ObjectAttributesRootDirectory 成员中的句柄表示的目录文件的路径名称。

DesiredAccess 参数中设置某些标志会导致以下效果:

  • 若要使调用方通过等待返回 FileHandle来同步 I/O 完成,必须设置 SYNCHRONIZE 标志。 否则,作为设备或中间驱动程序的调用方必须使用事件对象同步 I/O 完成。
  • 如果调用方仅设置FILE_APPEND_DATA和 SYNCHRONIZE 标志,则只能写入文件末尾,并且忽略有关写入操作的任何偏移信息。 此文件将根据此类操作的需要自动扩展。
  • 为文件设置FILE_WRITE_DATA标志还允许调用方在文件末尾之外写入。 同样,文件会根据需要自动扩展。
  • 如果调用方仅设置FILE_EXECUTE和 SYNCHRONIZE 标志,则无法使用返回的 FileHandle直接读取或写入文件的任何数据。 也就是说,文件上的所有操作都通过系统寻呼器来响应指令和数据访问操作。 设备和中间驱动程序不应设置FILE_EXECUTE标志。

ShareAccess 参数确定单独的线程是否可以同时访问同一文件。 如果两个调用方都具有适当的访问权限,则可以成功打开和共享该文件。 如果 NtCreateFile 的原始调用方未指定FILE_SHARE_READ、FILE_SHARE_WRITE或FILE_SHARE_DELETE,则其他调用方无法打开该文件,也就是说,将授予原始调用方独占访问权限。

若要成功打开共享文件,DesiredAccess 标志必须与 DesiredAccess 兼容,并且 ShareAccess 标志,这些标志之前尚未通过发布的所有打开操作。 也就是说,为给定文件 NtCreateFile 指定的 DesiredAccess 不得与不允许文件其他打开者访问的访问冲突。

CreateDisposition 值FILE_SUPERSEDE要求调用方对现有文件对象具有 DELETE 访问权限。 如果是这样,则成功调用 NtCreateFile,并在现有文件上FILE_SUPERSEDE有效地删除该文件,然后重新创建该文件。 这意味着,如果文件已被另一个线程打开,则它通过指定具有FILE_SHARE_DELETE标志集的 ShareAccess 参数来打开该文件。 请注意,这种类型的处置与覆盖文件的 POSIX 样式一致。

CreateDisposition 值FILE_OVERWRITE_IF和FILE_SUPERSEDE相似。 如果使用现有文件调用 NtCreateFile,并且其中任一 CreateDisposition 值,将替换该文件。

覆盖文件在语义上等效于取代操作,但以下情况除外:

  • 调用方必须具有对文件的写入访问权限,而不是删除访问权限。 这意味着,如果文件已被另一个线程打开,它将打开该文件,并在输入 ShareAccess中设置FILE_SHARE_WRITE标志。
  • 指定的文件属性在逻辑上为 ORed,该文件中已存在这些属性。 这意味着,如果文件已被另一个线程打开,则 NtCreateFile 的后续调用方无法禁用现有的 FileAttributes 标志,但可以为同一文件启用其他标志。 请注意,此覆盖文件的样式与 MS-DOS、Microsoft Windows 3.1 和 OS/2 一致。

FILE_DIRECTORY_FILE CreateOptions 值指定要创建或打开的文件是目录。 创建目录文件时,文件系统会在磁盘上创建适当的结构,以表示该特定文件系统磁盘结构中的空目录。 如果指定了此选项并且要打开的给定文件不是目录文件,或者调用方指定了不一致的 createOptionsCreateDisposition 值,则对 NtCreateFile 的调用将失败。

FILE_NO_INTERMEDIATE_BUFFERING CreateOptions 标志可防止文件系统代表调用方执行任何中间缓冲。 指定此标志会将调用方参数的以下限制置于其他 ZwXxx文件 例程。

  • 传递给 NtReadFileNtWriteFile 的任何可选 ByteOffset 必须是扇区大小的倍数。
  • 传递给 NtReadFileNtWriteFile长度 必须是扇区大小的一个整数。 请注意,指定对缓冲区的读取操作(其长度正好是扇区大小)可能会导致在传输过程中到达文件的末尾时,将较少的有效字节传输到该缓冲区。
  • 缓冲区必须符合基础设备的对齐要求。 若要获取此信息,请调用 NtCreateFile 以获取表示物理设备的文件对象的句柄,并将该句柄传递给 NtQueryInformationFile。 有关系统的FILE_XXX_ALIGNMENT 值的列表,请参阅 DEVICE_OBJECT
  • 调用 NtSetInformationFileFileInformationClass 参数设置为 FilePositionInformation 必须指定扇区大小的倍数偏移量。

只要通过返回 FileHandle引用的文件对象执行操作,FILE_SYNCHRONOUS_IO_ALERT和FILE_SYNCHRONOUS_IO_NONALERT CreateOptions 标志(互斥)指定文件上的所有 I/O 操作都是同步的。 此类文件上的所有 I/O 都使用返回的句柄在所有线程之间序列化。 如果设置了上述任一 CreateOptions 标志,则还必须设置 SYNCHRONIZE DesiredAccess 标志,以强制 I/O 管理器将文件对象用作同步对象。 在这些情况下,I/O 管理器会跟踪当前的文件位置偏移量,可以传递给 NtReadFileNtWriteFile。 调用 NtQueryInformationFileNtSetInformationFile 获取或设置此位置。

如果未指定 指定 CreateOptions FILE_OPEN_REPARSE_POINT 标志,NtCreateFile 尝试打开具有重新分析点的文件,则文件的正常重新分析点处理将发生。 另一方面,如果指定了FILE_OPEN_REPARSE_POINT标志,则正常重新分析处理不会 不会发生,并且 NtCreateFile 尝试直接打开重新分析点文件。 在任一情况下,如果打开操作成功,NtCreateFile 返回STATUS_SUCCESS;否则,例程返回 NTSTATUS 错误代码。 NtCreateFile 永远不会返回STATUS_REPARSE。

CreateOptions FILE_OPEN_REQUIRING_OPLOCK 标志消除了打开文件并请求可能允许第三方打开文件并获取共享冲突的 oplock 之间的时间。 应用程序可以在 NtCreateFile 上使用 FILE_OPEN_REQUIRING_OPLOCK 标志,然后请求任何 oplock。 这可确保 oplock 所有者将收到导致共享冲突的任何后续打开请求的通知。

在 Windows 7 中,如果应用程序使用 FILE_OPEN_REQUIRING_OPLOCK 标志时文件上存在其他句柄,则创建操作将失败并STATUS_OPLOCK_NOT_GRANTED。 从 Windows 8 开始,此限制不再存在。

如果此创建操作会中断文件上已存在的 oplock,则设置 FILE_OPEN_REQUIRING_OPLOCK 标志将导致创建操作失败并STATUS_CANNOT_BREAK_OPLOCK。 此创建操作不会破坏现有 oplock。

使用此FILE_OPEN_REQUIRING_OPLOCK标志的应用程序必须在此调用成功后请求 oplock,否则将阻止打开文件的所有后续尝试,而无需正常操作锁处理。 同样,如果此调用成功但后续的 oplock 请求失败,则使用此标志的应用程序必须在检测到 oplock 请求失败后关闭其句柄。 在请求 oplock 之前,应用程序不得对文件执行任何其他文件系统操作(除了关闭文件句柄),否则可能会出现死锁。

注意

FILE_OPEN_REQUIRING_OPLOCK标志在 Windows 7、Windows Server 2008 R2 及更高版本的 Windows 操作系统中提供。 在 Windows 7 中实现此标志的Microsoft文件系统是 NTFS、FAT 和 exFAT。

CreateOptions 标志FILE_RESERVE_OPFILTER允许应用程序请求级别 1、Batch 或 Filter oplock,以防止其他应用程序出现共享冲突。 但是,FILE_RESERVE_OPFILTER仅适用于筛选器 oplock。 若要使用它,必须完成以下步骤:

  1. CreateOptions FILE_RESERVE_OPFILTER、DesiredAccess 精确FILE_READ_ATTRIBUTES发出创建请求,完全FILE_SHARE_READ的 ShareAccess |FILE_SHARE_WRITE |FILE_SHARE_DELETE。
    • 如果已打开句柄,则创建请求会失败并STATUS_OPLOCK_NOT_GRANTED,并且下一个请求的 oplock 也会失败。
    • 如果以更多或更少的访问权限打开,也会导致STATUS_OPLOCK_NOT_GRANTED失败。
  2. 如果创建请求成功,请请求 oplock。
  3. 打开文件的另一个句柄以执行 I/O。

步骤 3 使此操作仅适用于筛选器操作锁。 在步骤 3 中打开的句柄可以有一个 DesiredAccess,其中包含最多FILE_READ_ATTRIBUTES |FILE_WRITE_ATTRIBUTES |FILE_READ_DATA |FILE_READ_EA |FILE_EXECUTE |SYNCHRONIZE |READ_CONTROL,但仍不中断筛选器操作锁。 但是,任何 DesiredAccess 大于 FILE_READ_ATTRIBUTES |FILE_WRITE_ATTRIBUTES |SYNCHRONIZE 将中断级别 1 或 Batch oplock,并使FILE_RESERVE_OPFILTER标志对这些 oplock 类型毫无用。

NTFS 是实现FILE_RESERVE_OPFILTER的唯一Microsoft文件系统。

对于 CreateOptions FILE_OPEN_BY_FILE_ID 标志,示例设备名称将采用以下格式:

\??\C:\<FileID>
\device\HardDiskVolume1\<ObjectID>

其中,FileID 为 8 个字节,ObjectID 为 16 个字节:

  • 在 NTFS 上,可以是 8 字节或 16 字节引用编号或对象 ID。 16 字节引用号与用零填充的 8 字节数相同。
  • 在 ReFS 上,可以是 8 字节或 16 字节引用编号。 16 字节数与 8 字节数无关。 不支持对象 ID。
  • FAT、ExFAT、UDFS 和 CDFS 文件系统不支持FILE_OPEN_BY_FILE_ID标志。

此数字由特定文件系统分配并特定于特定文件系统。 由于文件名字段部分包含二进制 blob,因此假定这是有效的 Unicode 字符串不正确,更重要的是可能不是 null 终止的字符串。

NtCreateFile 的调用方必须在 IRQL = PASSIVE_LEVEL上运行,启用了特殊内核 APC

注意

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

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

要求

要求 价值
最低支持的客户端 Windows 2000
目标平台 普遍
标头 ntifs.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL(请参阅“备注”部分)
DDI 符合性规则 HwStorPortProhibitedDDI、PowerIrpDDis

另请参阅

ACCESS_MASK

DEVICE_OBJECT

EXTENDED_CREATE_INFORMATION

IO_STATUS_BLOCK

InitializeObjectAttributes

NtClose

NtOpenFile

NtQueryInformationFile

NtReadFile

NtSetInformationFile

NtWriteFile