共用方式為


CreateFileTransactedW 函式 (winbase.h)

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

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

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

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

語法

HANDLE CreateFileTransactedW(
  [in]           LPCWSTR               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
只有在新檔案不存在時,才會建立新的檔案。

如果指定的檔案存在,函式會失敗,且最後一個錯誤碼會設定為 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 參數的一部分。

[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 Constants
屬性 意義
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
檔案或裝置正以會話感知開啟。 如果未指定此旗標,則會話 0 中執行的處理程式無法開啟個別會話裝置(例如使用 RemoteFX USB 重新導向的裝置)。 此旗標對不在會話 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

要開啟的迷你版本。 如果 hTransaction 中指定的交易不是正在修改檔案的交易,則此參數應該 NULL。 否則,此參數可以是 FSCTL_TXFS_CREATE_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_DATAFILE_ADD_FILE) 和 FILE_APPEND_DATAFILE_ADD_SUBDIRECTORY) 許可權。 這些包含在 FILE_GENERIC_WRITE 許可權中。 如果您只是使用句柄來建立檔案或子目錄,則應該開啟具有較少許可權的目錄;否則,可能會發生共享違規。

當該檔案是另一筆交易的一部分時,您無法開啟具有 FILE_EXECUTE 存取層級的檔案(也就是說,另一個應用程式藉由呼叫 CreateFileTransacted來開啟它)。 這表示如果指定存取層級 FILE_EXECUTEFILE_ALL_ACCESSCreateFileTransacted 會失敗

當非交易的應用程式呼叫 CreateFileTransacted,並針對 lpSecurityAttributes指定 MAXIMUM_ALLOWED 時,每次都會使用相同的存取層級開啟句柄。 當交易的應用程式呼叫 CreateFileTransacted,並針對 lpSecurityAttributes指定 MAXIMUM_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 所傳回的句柄。 此參數的下列資訊也適用:

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

請注意,SMB 3.0 不支援 TxF。

檔案

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

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

如果您重新命名或刪除檔案,然後在不久之後加以還原,系統會搜尋快取以取得要還原的檔案資訊。 快取的資訊包含其簡短/長名稱組和建立時間。

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

dwDesiredAccess 參數可以是零,可讓應用程式在沒有存取檔案的情況下查詢檔案屬性,如果應用程式執行時具有足夠的安全性設定。 這適用於測試檔案是否存在,而不需開啟檔案以進行讀取和/或寫入存取,或取得檔案或目錄的其他統計數據。 請參閱 取得和設定檔案資訊GetFileInformationByHandle

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

檔案數據流

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

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

目錄

應用程式無法使用 createFileTransacted建立目錄,因此此使用案例的 dwCreationDisposition 只有 OPEN_EXISTING才有效。 若要建立目錄,應用程式必須呼叫 CreateDirectoryTransactedCreateDirectoryCreateDirectoryEx

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

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

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

注意

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

要求

要求 價值
最低支援的用戶端 Windows Vista [僅限傳統型應用程式]
支援的最低伺服器 Windows Server 2008 [僅限傳統型應用程式]
目標平臺 窗戶
標頭 winbase.h (包括 Windows.h)
連結庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

CloseHandle

CopyFileTransacted

CreateDirectoryTransacted

DeleteFileTransacted

檔案壓縮和解壓縮

檔案加密

檔案管理功能

檔案安全性和訪問許可權

檔案數據流

FindFirstFileTransacted

函式

GetFileAttributesTransacted

MoveFileTransacted

概觀主題

交易式NTFS 的 程式設計考慮

ReadFile

交易式NTFS (TxF)

WriteFile