CreateFileTransactedA 函式 (winbase.h)

[Microsoft 強烈建議開發人員利用替代方式來達成應用程式的需求。 許多針對 TxF 開發的案例,都可以透過更簡單且更容易使用的技巧來達成。 此外,未來版本的 Microsoft Windows 可能無法使用 TxF。 如需詳細資訊,以及 TxF 的替代方案,請參閱 使用交易式 NTFS 的替代方案

建立或開啟檔案、檔案數據流或目錄做為交易作業。 函式會傳回可用來存取 物件的句柄。

若要以非傳輸的作業執行此作業,或存取檔案以外的物件 (,例如命名管道、實體裝置、mailslots) ,請使用 CreateFile 函式。

如需交易的詳細資訊,請參閱本主題的一節。

語法

HANDLE CreateFileTransactedA(
  [in]           LPCSTR                lpFileName,
  [in]           DWORD                 dwDesiredAccess,
  [in]           DWORD                 dwShareMode,
  [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  [in]           DWORD                 dwCreationDisposition,
  [in]           DWORD                 dwFlagsAndAttributes,
  [in, optional] HANDLE                hTemplateFile,
  [in]           HANDLE                hTransaction,
  [in, optional] PUSHORT               pusMiniVersion,
                 PVOID                 lpExtendedParameter
);

參數

[in] lpFileName

要建立或開啟之對象的名稱。

對象必須位於本機計算機上;否則,函式會失敗,而且最後一個錯誤碼會設定為 ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE

根據預設,名稱限製為MAX_PATH個字元。 若要將此限制延伸至 32,767 寬字元,請在路徑前面加上 “\\?\”。 如需詳細資訊,請參閱命名檔案、路徑與命名空間

提示

從 Windows 10 版本 1607 開始,您可以選擇移除MAX_PATH限制,而不需在前面加上 “\\?\”。 如需詳細資訊,請參閱 命名檔案、路徑和命名空間 的一節。

若要建立檔案數據流,請指定檔名、冒號,然後指定數據流的名稱。 如需詳細資訊,請參閱 檔案數據流

[in] dwDesiredAccess

物件的存取權,可摘要為讀取、寫入,或兩者皆無法 (零) 。 最常使用的值是GENERIC_READGENERIC_WRITE,或 (GENERIC_READ GENERIC_WRITE | ) 。 如需詳細資訊,請參閱 一般訪問許可權檔案安全性和訪問許可權

如果此參數為零,應用程式可以查詢檔案、目錄或裝置屬性,而不需要存取該檔案或裝置。 如需詳細資訊,請參閱本主題的一節。

您無法要求存取模式,該模式與具有開啟句柄的開啟要求中指定的共用模式發生衝突。 如需詳細資訊,請參閱 建立和開啟檔案

[in] dwShareMode

對象的共用模式,可以是讀取、寫入、兩者、刪除、全部或無 (請參閱下表) 。

如果此參數為零且 CreateFileTransacted 成功,則對象無法共用,而且在關閉句柄之前無法再次開啟。 如需詳細資訊,請參閱本主題的一節。

您無法要求與具有開啟句柄之開啟要求中指定的存取模式發生衝突的共用模式,因為這會導致下列共用違規: ERROR_SHARING_VIOLATION。 如需詳細資訊,請參閱 建立和開啟檔案

若要讓進程在另一個進程開啟物件時共享物件,請使用下列一或多個值的組合來指定可以要求開啟物件的存取模式。

注意 不論進程內容為何,每個開啟句柄的共享選項都會維持有效狀態,直到該句柄關閉為止。
 
意義
0
0x00000000
停用對象的後續開啟作業,以要求該物件的任何類型的存取權。
FILE_SHARE_DELETE
0x00000004
啟用物件上的後續開啟作業,以要求刪除存取權。

否則,如果其他進程要求刪除存取權,則無法開啟物件。

如果未指定此旗標,但對象已開啟以供刪除存取,則函式會失敗。

FILE_SHARE_READ
0x00000001
啟用物件上的後續開啟作業以要求讀取許可權。

否則,如果其他進程要求讀取許可權,則無法開啟 物件。

如果未指定此旗標,但對象已開啟以供讀取存取,則函式會失敗。

FILE_SHARE_WRITE
0x00000002
啟用物件上的後續開啟作業,以要求寫入存取權。

否則,如果其他進程要求寫入存取權,其他進程就無法開啟物件。

如果未指定此旗標,但對象已開啟以供寫入存取,或具有寫入許可權的檔案對應,則函式會失敗。

[in, optional] lpSecurityAttributes

包含選擇性安全性描述元之SECURITY_ATTRIBUTES結構的指標,也會判斷子進程是否可以繼承傳回的句柄。 參數可以是 NULL

如果 lpSecurityAttributes 參數為 NULL,則應用程式可能會建立的任何子進程無法繼承 CreateFileTransacted 所傳回的句柄,而且與傳回的句柄相關聯的物件會取得預設的安全性描述元。

結構的 bInheritHandle 成員會指定是否可以繼承傳回的句柄。

結構的 lpSecurityDescriptor 成員會指定對象 的安全性描述元 ,但也可能是 NULL

如果 lpSecurityDescriptor 成員為 NULL,則會將與傳回句柄相關聯的物件指派為預設安全性描述元。

CreateFileTransacted 會在開啟現有檔案時忽略 lpSecurityDescriptor 成員,但會繼續使用 bInheritHandle 成員。

如需詳細資訊,請參閱本主題的一節。

[in] dwCreationDisposition

對存在且不存在的檔案採取動作。

如需詳細資訊,請參閱本主題的一節。

此參數必須是下列其中一個值,無法合併。

意義
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 參數的一部分。

[in] dwFlagsAndAttributes

檔案屬性和旗標, FILE_ATTRIBUTE_NORMAL 為最常見的預設值。

此參數可以包含可用檔案屬性的任何組合, (FILE_ATTRIBUTE_*) 。 所有其他檔案屬性都會覆寫 FILE_ATTRIBUTE_NORMAL

此參數也可以包含旗標的組合 (FILE_FLAG_) ,以控制緩衝行為、存取模式和其他特殊用途旗標。 這些會與任何 FILE_ATTRIBUTE_ 值結合。

此參數也可以藉由指定 SECURITY_SQOS_PRESENT 旗標來包含安全性服務品質 (SQOS) 資訊。 下表顯示其他 SQOS 相關旗標資訊,如下表的屬性和旗標數據表。

注意  

當 CreateFileTransacted 開啟現有的檔案時,通常會將檔案旗標與現有檔案的檔案屬性結合,並忽略作為 dwFlagsAndAttributes 一部分提供的任何檔案屬性。 特殊案例詳述於 建立和開啟檔案中。

 
下列檔案屬性和旗標僅適用於檔案物件,而不是 CreateFileTransacted 開啟的其他類型物件, (本主題的一節中找到其他資訊) 。 如需檔案屬性的進階存取權,請參閱 SetFileAttributes。 如需所有檔案屬性及其值和描述的完整清單,請參閱 檔案屬性常數
屬性 意義
FILE_ATTRIBUTE_ARCHIVE
32 (0x20)
檔案應封存。 應用程式會使用這個屬性來標記要備份或移除的檔案。
FILE_ATTRIBUTE_ENCRYPTED
16384 (0x4000)
檔案或目錄已加密。 對檔案而言,這表示檔案中的所有資料都被加密。 對於目錄,這表示加密是新建立的檔案和子目錄的預設值。 如需詳細資訊,請參閱 檔案加密

如果同時指定 FILE_ATTRIBUTE_SYSTEM, 此旗標就不會有任何作用。

FILE_ATTRIBUTE_HIDDEN
2 (0x2)
檔案被隱藏起來。 請勿將其包含在一般目錄清單中。
FILE_ATTRIBUTE_NORMAL
128 (0x80)
檔案沒有設定其他屬性。 這個屬性只有在單獨使用時才有效。
FILE_ATTRIBUTE_OFFLINE
4096 (0x1000)
檔案的數據無法立即使用。 這個屬性表示檔案數據實際上會移至離線記憶體。 遠端記憶體會使用這個屬性,這是階層式記憶體管理軟體。 應用程式不應該任意變更這個屬性。
FILE_ATTRIBUTE_READONLY
1 (0x1)
檔案是唯讀的。 應用程式可以讀取檔案,但無法寫入或刪除檔案。
FILE_ATTRIBUTE_SYSTEM
4 (0x4)
檔案是操作系統的一部分或獨佔使用。
FILE_ATTRIBUTE_TEMPORARY
256 (0x100)
檔案正用於暫存記憶體。 檔案系統可避免在有足夠的快取記憶體可用時將數據寫回大量記憶體,因為應用程式會在關閉句柄之後刪除暫存盤。 在此情況下,系統可以完全避免寫入數據。 否則,會在關閉句柄之後寫入數據。
 
旗標 意義
FILE_FLAG_BACKUP_SEMANTICS
0x02000000
正在開啟或建立備份或還原作業的檔案。 當進程具有 SE_BACKUP_NAMESE_RESTORE_NAME 許可權時,系統可確保呼叫進程會覆寫檔案安全性檢查。 如需詳細資訊,請參閱 變更令牌中的許可權

您必須設定此旗標,才能取得目錄的句柄。 目錄句柄可以傳遞至某些函式,而不是檔案句柄。 如需詳細資訊,請參閱 目錄句柄

FILE_FLAG_DELETE_ON_CLOSE
0x04000000
檔案會在檔案的最後一個交易寫入器句柄關閉之後立即刪除,前提是交易仍在使用中。 如果檔案標示為要刪除,且交易寫入器句柄在交易完成之後仍然開啟,則不會刪除檔案。

如果檔案有現有的開啟句柄,除非呼叫全都以 FILE_SHARE_DELETE共用 模式開啟,否則呼叫會失敗。

除非指定了 FILE_SHARE_DELETE 共用模式,否則檔案的後續開啟要求會失敗。

FILE_FLAG_NO_BUFFERING
0x20000000
檔案正在開啟,且沒有系統快取。 此旗標不會影響硬碟快取或記憶體對應檔案。 與 FILE_FLAG_OVERLAPPED結合時,旗標會提供最大異步效能,因為 I/O 不依賴記憶體管理員的同步作業。 不過,某些 I/O 作業需要更多時間,因為數據不會保留在快取中。 此外,仍可能會快取檔案元數據。 若要將元數據排清到磁碟,請使用 FlushFileBuffers 函式。

使用 以 FILE_FLAG_NO_BUFFERING 開啟的檔案時,應用程式必須符合特定需求:

  • 檔案存取必須從磁碟區扇區大小的整數倍數的檔案內的位元移開始。
  • 檔案存取必須是磁碟區扇區大小的整數倍數的位元元組數目。 例如,如果扇區大小是 512 個字節,應用程式可以要求讀取和寫入 512、1024、1536 或 2048 個字節,但不能是 335、981 或 7171 個字節。
  • 讀取和寫入作業的緩衝區位址應對齊扇區對齊,這表示在磁碟區扇區大小的整數倍數的記憶體中對齊位址。 視磁碟而定,可能不會強制執行此需求。
在磁碟區扇區大小的整數倍數上對齊緩衝區的其中一種方式是使用 VirtualAlloc 來配置緩衝區。 它會在操作系統記憶體分頁大小的整數倍數的位址上配置對齊的記憶體。 因為記憶體分頁和磁碟區扇區大小都是 2 的冪,所以此記憶體也會對齊磁碟區扇區大小的整數倍數的位址。 記憶體頁面大小為 4 或 8 KB;扇區是 512 個字節 (硬碟) 、2048 個字節 (CD) ,或 4096 個字節 (硬碟) ,因此磁碟區扇區不能大於記憶體分頁。

應用程式可以呼叫 GetDiskFreeSpace 函式來判斷磁碟區扇區大小。

FILE_FLAG_OPEN_NO_RECALL
0x00100000
要求檔案數據,但應該會繼續位於遠端記憶體中。 它不應該傳輸回本機記憶體。 此旗標可供遠端儲存系統使用。
FILE_FLAG_OPEN_REPARSE_POINT
0x00200000
不會進行一般 重新分析點 處理; CreateFileTransacted 會嘗試開啟重新分析點。 開啟檔案時,會傳回檔案句柄,不論控制重新分析點的篩選是否正常運作。 此旗標不能與 CREATE_ALWAYS 旗標搭配使用。 如果檔案不是重新分析點,則會忽略此旗標。
FILE_FLAG_OVERLAPPED
0x40000000
開啟或建立這個檔案是為了非同步 I/O。 當作業完成時, 重迭 結構中指定的事件會設定為訊號狀態。 需要大量時間來處理傳回 ERROR_IO_PENDING的作業。

如果指定此旗標,則檔案可用於同時讀取和寫入作業。 系統不會維護檔案指標,因此您必須將檔案位置傳遞至 重疊 結構中的讀取和寫入函式,或更新檔案指標。

如果未指定此旗標,則即使讀取和寫入函式的呼叫指定 重疊 結構,I/O 作業也會串行化。

FILE_FLAG_POSIX_SEMANTICS
0x01000000
系統會根據 POSIX 規則來存取檔案。 這包括針對支援該命名的文件系統,只允許具有名稱的多個檔案,而不同。 使用此選項時請小心,因為針對 MS-DOS 或 16 位 Windows 所撰寫的應用程式可能無法存取以這個旗標建立的檔案。
FILE_FLAG_RANDOM_ACCESS
0x10000000
要隨機存取檔案。 系統可使用這個做為最佳化檔案快取的提示。
FILE_FLAG_SESSION_AWARE
0x00800000
檔案或裝置正以會話感知開啟。 如果未指定此旗標,則每個會話裝置 (,例如使用 RemoteFX USB 重新導向) 的裝置,無法在會話 0 中執行的進程開啟。 此旗標對不在會話 0 中的呼叫端沒有作用。 只有伺服器版本的 Windows 才支援此旗標。

Windows Server 2008 R2 和 Windows Server 2008: Windows Server 2012 之前不支援此旗標。

FILE_FLAG_SEQUENTIAL_SCAN
0x08000000
檔案是從頭到尾循序存取。 系統可使用這個做為最佳化檔案快取的提示。 如果應用程式移動檔案指標以進行隨機存取,則可能不會發生最佳快取。 不過,仍保證正確的作業。

指定此旗標可提高使用循序存取讀取大型檔案之應用程式的效能。 對於大部分依序讀取大型檔案的應用程式,效能提升可能更明顯,但偶爾會略過少量的位元組範圍。

如果文件系統不支援快取的 I/O 和 FILE_FLAG_NO_BUFFERING,則此旗標沒有任何作用。

FILE_FLAG_WRITE_THROUGH
0x80000000
寫入作業不會通過任何中繼快取,它們會直接移至磁碟。

如果未同時指定 FILE_FLAG_NO_BUFFERING ,讓系統快取生效,則數據會寫入系統快取,但會排清到磁碟,而不會延遲。

如果也指定 了FILE_FLAG_NO_BUFFERING ,因此系統快取不會生效,則數據會立即排清到磁碟,而不會通過系統快取。 操作系統也會要求寫入硬碟快取至永續性媒體。 不過,並非所有硬體都支援此寫入功能。

 

dwFlagsAndAttributes 參數也可以指定安全性服務質量資訊。 如需詳細資訊,請參閱 模擬層級。 當呼叫的應用程式將 SECURITY_SQOS_PRESENT 旗標指定為 dwFlagsAndAttributes 的一部分時,它也可以包含下列一或多個值。

安全性旗標 意義
SECURITY_ANONYMOUS
在匿名模擬層級模擬用戶端。
SECURITY_CONTEXT_TRACKING
安全性追蹤模式是動態的。 如果未指定此旗標,安全性追蹤模式為靜態。
SECURITY_DELEGATION
在委派模擬層級模擬用戶端。
SECURITY_EFFECTIVE_ONLY
只有客戶端安全性內容的啟用層面可供伺服器使用。 如果您未指定此旗標,則可以使用用戶端安全性內容的所有層面。

這可讓用戶端限制伺服器在模擬用戶端時可以使用的群組和許可權。

SECURITY_IDENTIFICATION
在識別模擬層級模擬用戶端。
SECURITY_IMPERSONATION
模擬模擬層級的用戶端。 如果未指定其他旗標以及 SECURITY_SQOS_PRESENT 旗標,則這是預設行為。

[in, optional] hTemplateFile

具有 GENERIC_READ 訪問許可權之範本檔案的有效句柄。 範本檔案會提供所建立檔案的檔案屬性和擴充屬性。 此參數可以是 Null

開啟現有的檔案時, CreateFileTransacted 會忽略範本檔案。

開啟新的EFS 加密檔案時,檔案會從其父目錄繼承 DACL。

[in] hTransaction

交易的句柄。 CreateTransaction 函式會傳回這個句柄。

[in, optional] pusMiniVersion

要開啟的miniversion。 如果 hTransaction 中指定的交易不是修改檔案的交易,這個參數應該是 NULL。 否則,此參數可以是 FSCTL_TXFS_CREATE_MINIVERSION 控件程式代碼傳回的miniversion識別碼,或下列其中一個值。

意義
TXFS_MINIVERSION_COMMITTED_VIEW
0x0000
自上次認可起,檔案的檢視。
TXFS_MINIVERSION_DIRTY_VIEW
0xFFFF
交易正在修改檔案的檢視。
TXFS_MINIVERSION_DEFAULT_VIEW
0xFFFE
視內容而定,檔案的已認可或已變更檢視。 正在修改檔案的交易會取得已變更的檢視,而未修改檔案的交易則會取得認可的檢視。

lpExtendedParameter

此參數是保留的,而且必須是 NULL

傳回值

如果函式成功,則傳回值是指定檔案、裝置、命名管道或郵件位置的開啟句柄。

如果函式失敗,傳回值 會INVALID_HANDLE_VALUE。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

備註

使用 CreateFileTransacted 傳回的句柄時,請使用檔案 I/O 函式的交易版本,而不是適當的標準檔案 I/O 函式。 如需詳細資訊,請參閱 交易式NTFS的程序設計考慮

開啟交易句柄至目錄時,該句柄必須具有 FILE_WRITE_DATA (FILE_ADD_FILE) 和 (FILE_APPEND_DATAFILE_ADD_SUBDIRECTORY) 許可權 。 這些包含在 FILE_GENERIC_WRITE 許可權中。 如果您只是使用句柄來建立檔案或子目錄,則應該以較少的許可權開啟目錄;否則,可能會發生共享違規。

當該檔案是另一個交易 (的一部分時,您無法開啟具有 FILE_EXECUTE 存取層級的檔案,方法是呼叫 CreateFileTransacted) 來開啟它。 這表示如果指定存取層級FILE_EXECUTEFILE_ALL_ACCESS,CreateFileTransacted 就會失敗

當非交易的應用程式呼叫 CreateFileTransacted,並針對 lpSecurityAttributes 指定MAXIMUM_ALLOWED時,每次都會以相同的存取層級開啟句柄。 當交易的應用程式呼叫 CreateFileTransacted 並指定給 lpSecurityAttributesMAXIMUM_ALLOWED時,根據交易是否鎖定檔案,會以不同的存取量開啟句柄。 例如,如果呼叫的應用程式具有 檔案的FILE_EXECUTE 存取層級,則只有在正在開啟的檔案不是由交易鎖定,或由交易鎖定,而且應用程式已經是該檔案的交易讀取器時,才會取得此存取權。

如需交易作業的完整描述,請參閱 交易NTFS

使用 CloseHandle 函式,在不再需要句柄時,以及認可或回復交易之前,關閉 CreateFileTransacted 傳回的物件句柄。

某些文件系統,例如 NTFS 檔案系統,支援個別檔案和目錄的壓縮或加密。 在針對該類型檔系統格式化的磁碟區上,新檔案會繼承其目錄的壓縮和加密屬性。

您無法使用 CreateFileTransacted 來控制檔案或目錄上的壓縮。 如需詳細資訊,請參閱 檔案壓縮和解壓縮檔案加密

符號連結行為- 如果呼叫此函式會建立新的檔案,則行為不會有任何變更。

如果指定 FILE_FLAG_OPEN_REPARSE_POINT

  • 如果開啟現有的檔案,而且它是符號連結,則傳回的句柄是符號連結的句柄。
  • 如果指定 TRUNCATE_EXISTINGFILE_FLAG_DELETE_ON_CLOSE ,受影響的檔案會是符號連結。
如果未指定 FILE_FLAG_OPEN_REPARSE_POINT
  • 如果開啟現有的檔案,而且它是符號連結,則傳回的句柄是目標的句柄。
  • 如果指定 CREATE_ALWAYSTRUNCATE_EXISTINGFILE_FLAG_DELETE_ON_CLOSE ,受影響的檔案就是目標。
除非您使用交易 (,否則多扇區寫入不保證為不可部分完成的,也就是說,所建立的句柄是交易句柄) 。 單扇區寫入是不可部分完成的。 快取的多扇區寫入不一定會寫入磁碟;因此,請指定 FILE_FLAG_WRITE_THROUGH ,以確保整個多扇區寫入磁碟而不快取。

如先前所述,如果 lpSecurityAttributes 參數為 NULL,則應用程式可能建立的任何子進程都無法繼承 CreateFileTransacted 所傳回的句柄。 此參數的下列資訊也適用於:

  • 如果 bInheritHandle 不是 FALSE,這是任何非零值,則可以繼承句柄。 因此,如果您不想要繼承句柄,此結構成員必須正確地初始化為 FALSE
  • 訪問控制清單 (ACL) 檔案或目錄的預設安全性描述項繼承自其父目錄。
  • 目標文件系統必須支援檔案和目錄的安全性,lpSecurityDescriptor 才能對它們產生影響,這可以使用 GetVolumeInformation 來判斷
在 Windows 8 和 Windows Server 2012 中,下列技術支援此函式。
技術 支援
伺服器消息塊 (SMB) 3.0 通訊協定 No
SMB 3.0 透明故障轉移 (TFO) No
具有向外延展檔案共用的SMB 3.0 (SO) No
叢集共用磁碟區文件系統 (CsvFS) No
彈性檔案系統 (ReFS) No
 

請注意,SMB 3.0 不支援 TxF。

如果您嘗試在沒有磁碟片的磁碟驅動器或沒有CD的CD-ROM磁碟驅動器上建立檔案,系統會顯示一則訊息,讓使用者插入磁碟或CD。 若要防止系統顯示此訊息,請使用 SEM_FAILCRITICALERRORS呼叫 SetErrorMode 函式。

如需詳細資訊,請參閱 建立和開啟檔案

如果您重新命名或刪除檔案,然後稍後還原它,系統會在快取中搜尋要還原的檔案資訊。 快取的資訊包括其簡短/完整名稱組和建立時間。

如果您在先前呼叫DeleteFile時擱置刪除的檔案上呼叫 CreateFileTransacted,函式會失敗。 操作系統會延遲檔案刪除,直到關閉檔案的所有句柄為止。 GetLastError傳回ERROR_ACCESS_DENIED

dwDesiredAccess 參數可以是零,允許應用程式在應用程式執行時使用適當的安全性設定來查詢檔案屬性,而不需要存取檔案。 這很適合用來測試檔案是否存在,而不需開啟檔案以進行讀取和/或寫入存取,或取得檔案或目錄的其他統計數據。 請參閱 取得和設定檔案資訊和GetFileInformationByHandle

當應用程式透過網路建立檔案時,最好使用GENERIC_READ GENERIC_WRITE | ,而不是單獨使用GENERIC_WRITE 產生的程式代碼較快,因為重新導向器可以使用快取管理員,並傳送較少的SMB與更多數據。 這種組合也可避免在網路上寫入檔案時,偶爾會傳回 ERROR_ACCESS_DENIED的問題。

檔案數據流

在 NTFS 文件系統上,您可以使用 CreateFileTransacted 在檔案內建立個別的數據流。

如需詳細資訊,請參閱 檔案數據流

目錄

應用程式無法使用 CreateFileTransacted 建立目錄,因此此使用案例中,只有 OPEN_EXISTING 值對 dwCreationDisposition 有效。 若要建立目錄,應用程式必須呼叫 CreateDirectoryTransactedCreateDirectory 或 CreateDirectoryEx

若要使用 CreateFileTransacted 開啟目錄,請將 FILE_FLAG_BACKUP_SEMANTICS 旗標指定為 dwFlagsAndAttributes 的一部分。 當使用此旗標而不 SE_BACKUP_NAMESE_RESTORE_NAME 許可權時,仍適用適當的安全性檢查。

使用 CreateFileTransacted 在 FAT 或 FAT32 檔系統磁碟區的重組期間開啟目錄時,請勿指定 MAXIMUM_ALLOWED 訪問許可權。 如果這樣做,目錄的存取就會遭到拒絕。 請改為指定 GENERIC_READ 訪問許可權。

如需詳細資訊,請參閱 關於目錄管理

注意

winbase.h 標頭會將 CreateFileTransacted 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例

規格需求

需求
最低支援的用戶端 Windows Vista [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008 [僅限傳統型應用程式]
目標平台 Windows
標頭 winbase.h (包含 Windows.h)
程式庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

CloseHandle

CopyFileTransacted

CreateDirectoryTransacted

DeleteFileTransacted

檔案壓縮和解壓縮

檔案加密

檔案管理功能

檔案安全性和訪問許可權

檔案數據流

FindFirstFileTransacted

函式

GetFileAttributesTransacted

MoveFileTransacted

概觀主題

交易式NTFS的程式設計考慮

ReadFile

交易式NTFS (TxF)

WriteFile