CF_OPEN_FILE_FLAGS列舉 (cfapi.h)
旗標,要求開啟檔案的各種許可權。
Syntax
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 |DELETE (或兩者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 時呼叫失敗,而且如果需要避免稍後發生共用違規,可以告知他們關閉其句柄。 除非呼叫端指定對 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,例如搭配 CfOpenFileWithOplock 使用 CF_OPEN_FILE_FLAG_EXCLUSIVE來授與。 然後,如果有些其他開啟者與背景應用程式的模式衝突,其要求的共用/存取模式與背景應用程式的模式衝突,背景應用程式的 oplock 就會中斷。 這會提示背景應用程式關閉其檔案句柄 (,使它變成無效 –實際基礎句柄已關閉) 。 背景應用程式關閉其句柄之後,其他開啟的要求會繼續進行,而不會發生共享違規。 這全都是因為 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 |