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 |