建立或開啟檔案或 I/O 裝置。 此函式的行為與 CreateFile2 相同,不同之處在於此函式會遵循通用 Windows 平臺應用程式安全性模型。
語法
WINSTORAGEAPI HANDLE CreateFile2FromAppW(
LPCWSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
DWORD dwCreationDisposition,
LPCREATEFILE2_EXTENDED_PARAMETERS pCreateExParams
) noexcept;
參數
lpFileName
要建立或開啟的檔案或裝置名稱。
如需特殊裝置名稱的相關資訊,請參閱 定義 MS-DOS 裝置名稱。
若要建立檔案串流,請指定檔案名稱、冒號,然後指定串流名稱。 如需詳細資訊,請參閱 檔案串流。
如需選擇退出 MAX_PATH 限制而不加上前置 “\\?\” 的資訊,請參閱 命名檔案、路徑和命名空間 的「路徑長度限制上限」一節以取得詳細資訊。
dwDesiredAccess
要求存取檔案或裝置,可以總結為讀取、寫入、兩者或兩者都不是零)。
最常用的值是 GENERIC_READ、 GENERIC_WRITE或兩者 (GENERIC_READ | GENERIC_WRITE)。 如需詳細資訊,請參閱 一般存取權限、 檔案安全性和存取權限、 檔案存取權限常數和 ACCESS_MASK。
如果此參數為零,應用程式可以查詢某些中繼資料,例如檔案、目錄或裝置屬性,而不需要存取該檔案或裝置,即使 GENERIC_READ 存取會遭到拒絕也一樣。
您無法要求與已具有開啟控制碼的開啟要求中 dwShareMode 參數所指定的共用模式衝突的存取模式。
dwShareMode
檔案或裝置所要求的共用模式,可以是讀取、寫入、兩者、刪除、所有這些或無 (請參閱下表)。 對屬性或延伸屬性的存取要求不受此旗標的影響。
如果此參數為零且函式成功,則無法共用檔案或裝置,且無法再次開啟,直到關閉檔案或裝置的控點為止。 如需詳細資訊,請參閱一節。
您無法要求與具有開啟控點的現有要求中指定的存取模式衝突的共用模式。 此函式將會失敗, 而 GetLastError 函式會傳回 ERROR_SHARING_VIOLATION。
若要讓進程在另一個進程開啟檔案或裝置時共用檔案或裝置,請使用下列一或多個值的相容組合。 如需此參數與 dwDesiredAccess 參數有效組合的詳細資訊,請參閱 建立和開啟檔案。
便條 每個開啟控制碼的共用選項都會保持有效,直到關閉該控制碼為止,而不論進程內容為何。
| 價值觀 | Meaning |
|---|---|
| 0 0x00000000 | 防止其他進程在要求刪除、讀取或寫入存取權時開啟檔案或裝置。 只有在應用程式具有檔案的寫入許可權時,才會授與檔案或目錄的獨佔存取權。 |
| FILE_SHARE_DELETE 0x00000004 | 啟用檔案或裝置上的後續開啟作業,以要求刪除存取權。 否則,如果其他進程要求刪除存取權,則無法開啟檔案或裝置。 如果未指定此旗標,但已開啟檔案或裝置以進行刪除存取,則函式會失敗。 便條 刪除存取權允許刪除和重新命名作業。 |
| FILE_SHARE_READ 0x00000001 | 啟用檔案或裝置上的後續開啟作業,以要求讀取存取權。 否則,其他進程在要求讀取存取權時無法開啟檔案或裝置。 如果未指定此旗標,但已開啟檔案或裝置以取得讀取權,則函式會失敗。 如果正在開啟檔案或目錄,且未指定此旗標,且呼叫端沒有檔案或目錄的寫入存取權,則函式會失敗。 |
| FILE_SHARE_WRITE 0x00000002 | 啟用檔案或裝置上的後續開啟作業,以要求寫入存取權。 否則,如果其他進程要求寫入存取權,則無法開啟檔案或裝置。 如果未指定此旗標,但已開啟檔案或裝置以進行寫入存取,或具有具有寫入存取權的檔案對映,則函式會失敗。 |
dwCreationDisposition
對存在或不存在的檔案或裝置採取的動作。
對於檔案以外的設備,此參數通常設定為 OPEN_EXISTING。
此參數必須是下列其中一個值,且無法組合:
| 價值觀 | Meaning |
|---|---|
| CREATE_ALWAYS 2 | 一律建立新檔案。 如果指定的檔案存在且可寫入,則函式會截斷檔案,函式會成功,且最後一個錯誤碼會設定為 ERROR_ALREADY_EXISTS (183)。 如果指定的檔案不存在且是有效路徑,則會建立新檔案、函式成功,且最後一個錯誤碼會設為零。 |
| CREATE_NEW 1 | 建立新檔案,僅當該檔案尚不存在時。 如果指定的檔案存在,則函式會失敗,且最後一個錯誤碼會設為 ERROR_FILE_EXISTS (80)。 如果指定的檔案不存在,且是可寫入位置的有效路徑,則會建立新檔案。 |
| OPEN_ALWAYS 4 | 一律開啟檔案。 如果指定的檔案存在,則函式會成功,且最後一個錯誤碼會設定為 ERROR_ALREADY_EXISTS (183)。 如果指定的檔案不存在,且是可寫入位置的有效路徑,則函式會建立檔案,並將最後一個錯誤碼設為零。 |
| OPEN_EXISTING 3 | 開啟檔案或裝置,前提是它存在。 如果指定的檔案或裝置不存在,則函式會失敗,且最後一個錯誤碼會設定為 ERROR_FILE_NOT_FOUND (2)。 |
| TRUNCATE_EXISTING 5 | 開啟檔案並截斷它,使其大小為零位元組,只有在檔案存在時。 如果指定的檔案不存在,則函數會失敗,且最後一個錯誤碼會設為 ERROR_FILE_NOT_FOUND (2)。 呼叫程式必須開啟檔案,並將 GENERIC_WRITE 位設定為 dwDesiredAccess 參數的一部分。 |
pCreateExParams
選擇性 CREATEFILE2_EXTENDED_PARAMETERS 結構的指標。
返回值
如果函式成功,傳回值是指定檔案、裝置、具名管道或郵件位置的開啟控制碼。
如果函式失敗,則傳回值為 INVALID_HANDLE_VALUE。 若要取得擴充錯誤資訊,請呼叫 GetLastError。
需求
| Requirement | 價值觀 |
|---|---|
| 最低支援的用戶端 | Windows 10 版本 1803 |
| Header | fileapifromapp.h |
| Library | OneCore.Lib |