reOpenFile 函数 (winbase.h)
重新打开具有不同访问权限、共享模式和标志的指定文件系统对象。
语法
HANDLE ReOpenFile(
[in] HANDLE hOriginalFile,
[in] DWORD dwDesiredAccess,
[in] DWORD dwShareMode,
[in] DWORD dwFlagsAndAttributes
);
参数
[in] hOriginalFile
要重新打开的对象的句柄。 对象必须由 CreateFile 函数创建。
[in] dwDesiredAccess
对 对象所需的访问权限。 有关值的列表,请参阅 文件安全性和访问权限。 不能请求的访问模式与上一个打开的请求中指定的共享模式冲突,该请求的句柄仍处于打开状态。
如果此参数为零 (0) ,则应用程序可以在不访问设备的情况下查询设备属性。 如果应用程序想要确定软盘驱动器的大小以及它支持的格式,而无需在驱动器中使用软盘,则这非常有用。
[in] dwShareMode
对象的共享模式。 不能请求的共享模式与上一个打开的请求中指定的访问模式冲突,该请求的句柄仍处于打开状态。
如果此参数为零 (0) 并且 CreateFile 成功,则不能共享对象,并且不能再次打开该对象,直到句柄关闭。
若要使其他进程在进程打开对象时共享该对象,请使用以下一个或多个值的组合来指定在打开对象时可以请求的访问类型。 这些共享选项一直有效,直到关闭对象的句柄。
[in] dwFlagsAndAttributes
文件标志。 此参数可使用以下一个或多个值。
值 | 含义 |
---|---|
|
指示正在为备份或还原操作打开或创建文件。 如果调用进程具有 SE_BACKUP_NAME 和 SE_RESTORE_NAME 特权,则系统会确保调用进程替代文件安全检查。 有关详细信息,请参阅 更改令牌中的特权。
还可以设置此标志以获取目录的句柄。 如果指示,目录句柄可以传递给某些函数,以取代文件句柄。 |
|
指示操作系统在关闭文件的所有句柄后立即删除文件,不仅是指定的句柄,还有任何其他打开或重复的句柄。
除非使用 FILE_SHARE_DELETE ,否则文件的后续打开请求将失败。 |
|
指示系统在没有中间缓冲或缓存的情况下打开文件。 与 FILE_FLAG_OVERLAPPED 结合使用时, 标志可提供最大的异步性能,因为 I/O 不依赖于内存管理器的同步操作。 但是,某些 I/O 操作需要更长的时间,因为数据不会保存在缓存中。
使用 FILE_FLAG_NO_BUFFERING 打开的文件时,应用程序必须满足特定要求:
应用程序可以通过调用 GetDiskFreeSpace 函数来确定卷扇区大小。 |
|
指示已请求文件数据,但它应继续驻留在远程存储中。 不应将其传输回本地存储。 此标志适用于远程存储系统。 |
|
使用此标志时,不会进行正常的 重新分析点 处理,并且 ReOpenFile 会尝试打开重新分析点。 打开文件时,无论控制重分析点的筛选器是否正常运行,都返回文件句柄。 此标志不能与 CREATE_ALWAYS 标志一起使用。 如果文件不是重分析点,则忽略此标志。 |
|
指示系统初始化 对象,以便处理花费大量时间的操作 返回ERROR_IO_PENDING。 操作完成后,指定的事件将设置为信号状态。
指定 FILE_FLAG_OVERLAPPED时,文件读取和写入函数 必须 指定 OVERLAPPED 结构。 也就是说,指定 FILE_FLAG_OVERLAPPED 时,应用程序 必须 执行重叠的读取和写入。 指定 FILE_FLAG_OVERLAPPED 时,系统不维护文件指针。 文件位置必须作为 lpOverlapped 参数的一部分传递, (指向文件读取和写入函数的 OVERLAPPED 结构) 。 此标志还允许将多个操作与句柄同时执行, (同时执行读取和写入操作,例如) 。 |
|
指示要根据 POSIX 规则访问文件。 这包括对于支持此类命名的文件系统,允许具有名称的多个文件(仅在大小写上不同)。 使用此选项时请小心,因为针对 MS-DOS 或 16 位 Windows 编写的应用程序可能无法访问使用此标志创建的文件。 |
|
指示随机访问文件。 系统可将此选项用作优化文件缓存的提示。 |
|
指示按从头到尾的顺序访问文件。 系统可将此选项用作优化文件缓存的提示。 如果应用程序移动用于随机访问的文件指针,可能不发生优化缓存,但仍然保证操作的正确性。
指定此标志可以提高使用顺序访问读取大型文件的应用程序的性能。 对于主要按顺序读取大型文件,但偶尔跳过较小字节范围的应用程序,性能提升可能更为明显。 |
|
指示系统通过任何中间缓存进行写入,并直接转到磁盘。 系统仍然可以缓存写入操作,但无法延迟刷新这些操作。 |
如果句柄表示命名管道的客户端, 则 dwFlags 参数还可以包含安全服务质量信息。 有关详细信息,请参阅 模拟级别。 当调用应用程序指定 SECURITY_SQOS_PRESENT 标志时, dwFlags 参数可以包含以下一个或多个值。
返回值
如果函数成功,则返回值是指定文件的打开句柄。
如果函数失败,则返回值为 INVALID_HANDLE_VALUE。 要获得更多的错误信息,请调用 GetLastError。
注解
dwFlags 参数不能包含 (FILE_ATTRIBUTE_*) 的任何文件属性标志。 只能在创建文件时指定这些参数。
在 Windows 8 和 Windows Server 2012 中,此函数由以下技术支持。
技术 | 支持 |
---|---|
服务器消息块 (SMB) 3.0 协议 | 是 |
SMB 3.0 透明故障转移 (TFO) | 是 |
具有横向扩展文件共享的 SMB 3.0 (SO) | 是 |
群集共享卷文件系统 (CSV) | 是 |
弹性文件系统 (ReFS) | 是 |
要求
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | winbase.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |