CF_OPEN_FILE_FLAGS 枚举 (cfapi.h)

用于请求打开文件时的各种权限的标志。

语法

typedef enum CF_OPEN_FILE_FLAGS {
  CF_OPEN_FILE_FLAG_NONE = 0x00000000,
  CF_OPEN_FILE_FLAG_EXCLUSIVE = 0x00000001,
  CF_OPEN_FILE_FLAG_WRITE_ACCESS = 0x00000002,
  CF_OPEN_FILE_FLAG_DELETE_ACCESS = 0x00000004,
  CF_OPEN_FILE_FLAG_FOREGROUND = 0x00000008
} ;

常量

 
CF_OPEN_FILE_FLAG_NONE
值: 0x00000000
没有打开的文件标志。
CF_OPEN_FILE_FLAG_EXCLUSIVE
值: 0x00000001
指定时, CfOpenFileWithOplock 返回 无共享 句柄并请求 RH (OPLOCK_LEVEL_CACHE_READ |OPLOCK_LEVEL_CACHE_HANDLE) 文件上的 oplock。

为任何FILE_EXECUTE打开的常规 CreateFile 调用 |FILE_READ_DATA |FILE_WRITE_DATA |FILE_APPEND_DATA |删除 (或任一/两GENERIC_READ |GENERIC_WRITE) 由于共享冲突而中断 oplock,如 备注 部分所述。 oplock 所有者将完成并确认。
CF_OPEN_FILE_FLAG_WRITE_ACCESS
值: 0x00000002
指定后, CfOpenFileWithOplock 会尝试使用 FILE_READ_DATA/FILE_LIST_DIRECTORY 和 FILE_WRITE_DATA/FILE_ADD_FILE 访问权限打开文件或目录;否则,它会尝试使用 FILE_READ_DATA/FILE_LIST_DIRECTORY 打开文件或目录。
CF_OPEN_FILE_FLAG_DELETE_ACCESS
值: 0x00000004
指定后, CfOpenFileWithOplock 会尝试使用 DELETE 访问权限打开文件或目录;否则,它会正常打开文件。
CF_OPEN_FILE_FLAG_FOREGROUND
值: 0x00000008
使用此标志时, CfOpenFileWithOplock 不请求 oplock。 当调用方充当前台应用程序时,应使用此选项。 也就是说,他们不关心此 API 创建的文件句柄是否会导致其他调用方发生共享冲突,也不关心破坏文件上可能已存在的任何 oplock。 因此,无需请求 oplock 即可打开句柄。

注意: 默认 后台 行为在打开文件句柄时请求 oplock,这样,如果已有 oplock,则其调用会失败;如果需要避免以后导致共享冲突,可以告知他们关闭句柄。
除非调用方指定 cfOpenFileWithOplock 的CF_OPEN_FILE_FLAG_EXCLUSIVE,否则他们获取的 oplock 将仅OPLOCK_LEVEL_CACHE_READ,而不是 (OPLOCK_LEVEL_CACHE_READ |OPLOCK_LEVEL_CACHE_HANDLE) ,因此后台应用通常不需要共享冲突保护。

注解

后台应用程序通常希望以透明方式对文件进行操作。 具体而言,他们希望避免导致其他 (前台) 打开器的共享冲突。 为此,他们采取 (OPLOCK_LEVEL_CACHE_READ |OPLOCK_LEVEL_CACHE_HANDLE) oplock(例如)将通过将 CF_OPEN_FILE_FLAG_EXCLUSIVE 与 CfOpenFileWithOplock 一起使用来授予。 然后,如果其他打开程序请求的共享/访问模式与后台应用程序的模式冲突,则后台应用程序的 oplock 将中断。 这会提示后台应用关闭其 cf 句柄的文件句柄 (,这会导致它变得无效 - 实际基础句柄已关闭) 。 后台应用关闭其句柄后,打开的另一个请求将继续,而不会遇到共享冲突。 这一切之所以有效,是因为 oplock 的OPLOCK_LEVEL_CACHE_HANDLE部分。 如果没有CF_OPEN_FILE_FLAG_EXCLUSIVE,oplock 只有OPLOCK_LEVEL_CACHE_READ保护,因此不提供共享违规保护。

如果未指定CF_OPEN_FILE_FLAG_EXCLUSIVE,则打开的 将 全部共享 ,并获取OPLOCK_LEVEL_CACHE_READ oplock。

正常的 CreateFile 调用不会中断 oplock。 例如,如果普通 CreateFile 指定的共享模式与 Cf 句柄的访问 (冲突,则如果普通 CreateFile 未指定FILE_SHARE_READ) ,则正常的 CreateFile 将失败并出现ERROR_SHARING_VIOLATION。 在其他调用方发出冲突的 I/O(例如写入)之前,oplock 不会中断。 发生这种情况时 ,oplock 中断仅为公告

要求

要求
最低受支持的客户端 Windows 10版本 1709 [仅限桌面应用]
最低受支持的服务器 Windows Server 2016 [仅限桌面应用]
标头 cfapi.h

另请参阅

CfOpenFileWithOplock

CreateFile