CreateFile2FromAppW 函式 (fileapifromapp.h)
建立或開啟檔案或 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 參數之有效組合的詳細資訊,請參閱 建立和開啟檔案。
注意 不論進程內容為何,每個開啟句柄的共享選項都會維持有效狀態,直到該句柄關閉為止。
值 | 意義 |
---|---|
0 0x00000000 | 防止其他進程在要求刪除、讀取或寫入存取時開啟檔案或裝置。 只有在應用程式具有檔案的寫入許可權時,才會授與檔案或目錄的獨佔存取權。 |
FILE_SHARE_DELETE 0x00000004 | 啟用檔案或裝置上的後續開啟作業,以要求刪除存取權。 否則,如果進程要求刪除存取權,其他進程就無法開啟檔案或裝置。 如果未指定此旗標,但檔案或裝置已開啟以進行刪除存取,則函式會失敗。 注意 刪除存取允許刪除和重新命名作業。 |
FILE_SHARE_READ 0x00000001 | 啟用檔案或裝置上的後續開啟作業,以要求讀取許可權。 否則,如果進程要求讀取許可權,其他進程就無法開啟檔案或裝置。 如果未指定此旗標,但檔案或裝置已開啟以供讀取存取,則函式會失敗。 如果正在開啟檔案或目錄,而且未指定此旗標,而且呼叫端沒有檔案或目錄的寫入許可權,則函式會失敗。 |
FILE_SHARE_WRITE 0x00000002 | 啟用檔案或裝置上的後續開啟作業,以要求寫入存取權。 否則,如果進程要求寫入許可權,其他進程就無法開啟檔案或裝置。 如果未指定此旗標,但檔案或裝置已開啟以供寫入存取,或具有寫入許可權的檔案對應,則函式會失敗。 |
dwCreationDisposition
要對存在或不存在之檔案或裝置採取的動作。
對於檔案以外的裝置,此參數通常會設定為 OPEN_EXISTING。
此參數必須是下列其中一個值,無法合併:
值 | 意義 |
---|---|
CREATE_ALWAYS 2 | 一律建立新的檔案。 如果指定的檔案存在且可寫入,則函式會截斷檔案、函式成功,且最後錯誤碼會設定為 ERROR_ALREADY_EXISTS ( 183) 。 如果指定的檔案不存在且是有效的路徑,則會建立新的檔案、函式成功,且最後一個錯誤碼會設定為零。 |
CREATE_NEW 1 | 只有在檔案不存在時,才會建立新的檔案。 如果指定的檔案存在,函式會失敗,且最後一個錯誤碼會設定為 ( 80) ERROR_FILE_EXISTS。 如果指定的檔案不存在,而且是可寫入位置的有效路徑,則會建立新的檔案。 |
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。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 10 (版本 1803) |
標頭 | fileapifromapp.h |