reOpenFile 函式 (winbase.h)

重新開啟具有不同存取權限、共用模式和旗標的指定檔案系統物件。

語法

HANDLE ReOpenFile(
  [in] HANDLE hOriginalFile,
  [in] DWORD  dwDesiredAccess,
  [in] DWORD  dwShareMode,
  [in] DWORD  dwFlagsAndAttributes
);

參數

[in] hOriginalFile

要重新開啟之物件的控制碼。 物件必須由 CreateFile 函式建立。

[in] dwDesiredAccess

物件的必要存取權。 如需值清單,請參閱 檔案安全性和存取權限。 您無法要求存取模式,該模式與先前開啟要求中指定的共用模式發生衝突,其控制碼仍然開啟。

如果此參數為零 (0) ,則應用程式可以在不存取裝置的情況下查詢裝置屬性。 如果應用程式想要判斷磁片磁碟機的大小,以及它支援的格式,而不需要磁片磁碟機中的磁片磁碟機,這非常有用。

[in] dwShareMode

物件的共用模式。 您無法要求與先前開啟要求中指定的存取模式發生衝突的共用模式,其控制碼仍然開啟。

如果此參數為零 (0) 且 CreateFile 成功,則無法共用物件,而且在關閉控制碼之前無法再次開啟。

若要讓其他進程在開啟物件時共用物件,請使用下列一或多個值的組合來指定開啟物件時可以要求的存取類型。 這些共用選項會維持有效狀態,直到您關閉物件的控制碼為止。

意義
FILE_SHARE_DELETE
0x00000004
在 物件上啟用後續開啟作業,以要求刪除存取權。 否則,如果其他進程要求刪除存取權,則無法開啟物件。

如果物件已經以刪除存取權開啟,共用模式必須包含此旗標。

FILE_SHARE_READ
0x00000001
在 物件上啟用後續開啟作業,以要求讀取權限。 否則,如果其他進程要求讀取權限,則無法開啟物件。

如果物件已經以讀取權限開啟,則共用模式必須包含此旗標。

FILE_SHARE_WRITE
0x00000002
在 物件上啟用後續開啟作業,以要求寫入存取權。 否則,如果進程要求寫入權限,則無法開啟物件。

如果物件已經以寫入權限開啟,共用模式必須包含此旗標。

[in] dwFlagsAndAttributes

檔案旗標。 此參數可以是下列一或多個值。

意義
FILE_FLAG_BACKUP_SEMANTICS
0x02000000
表示正在開啟或建立備份或還原作業的檔案。 系統可確保呼叫進程會覆寫檔案安全性檢查,前提是其具有 SE_BACKUP_NAMESE_RESTORE_NAME 許可權。 如需詳細資訊,請參閱 變更權杖中的許可權

您也可以設定此旗標,以取得目錄的控制碼。 如果指出,目錄控制碼可以傳遞至某些函式來取代檔案控制代碼。

FILE_FLAG_DELETE_ON_CLOSE
0x04000000
表示作業系統是在關閉所有控制碼之後立即刪除檔案,而不只是指定的控制碼,也是任何其他開啟或重複的控制碼。

除非使用 FILE_SHARE_DELETE ,否則檔案的後續開啟要求會失敗。

FILE_FLAG_NO_BUFFERING
0x20000000
指示系統開啟沒有中繼緩衝或快取的檔案。 與 FILE_FLAG_OVERLAPPED結合時,旗標會提供最大的非同步效能,因為 I/O 不會依賴記憶體管理員的同步作業。 不過,某些 I/O 作業需要較長的時間,因為資料不會保留在快取中。

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

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

應用程式可以藉由呼叫 GetDiskFreeSpace 函式來判斷磁片區磁區大小。

FILE_FLAG_OPEN_NO_RECALL
0x00100000
表示要求檔案資料,但應該繼續位於遠端儲存體中。 它不應該傳輸回本機儲存體。 此旗標適用于遠端儲存系統。
FILE_FLAG_OPEN_REPARSE_POINT
0x00200000
使用此旗標時,不會發生一般 重新分析點 處理,而 ReOpenFile 會嘗試開啟重新分析點。 開啟檔案時,會傳回檔案控制代碼,不論控制重新分析點的篩選是否正常運作。 這個旗標不能與 CREATE_ALWAYS 旗標搭配使用。 如果檔案不是重新分析點,則會忽略此旗標。
FILE_FLAG_OVERLAPPED
0x40000000
指示系統初始化 物件,讓處理傳回 ERROR_IO_PENDING花費大量時間的作業。 作業完成時,指定的事件會設定為已發出訊號的狀態。

當您指定 FILE_FLAG_OVERLAPPED時,檔案讀取和寫入函式 必須 指定 OVERLAPPED 結構。 也就是說,指定 FILE_FLAG_OVERLAPPED 時,應用程式 必須 執行重迭的讀取和寫入。

指定 FILE_FLAG_OVERLAPPED 時,系統不會維護檔案指標。 檔案位置必須當做 lpOverlapped 參數的一部分傳遞, (指向 重迭 結構,) 至檔案讀取和寫入函式。

此旗標也可讓多個作業與控制碼同時執行, (同時讀取和寫入作業,例如) 。

FILE_FLAG_POSIX_SEMANTICS
0x01000000
表示要根據 POSIX 規則存取檔案。 這包括針對支援這類命名的檔案系統,允許具有名稱的多個檔案,唯有不同。 使用此選項時請小心,因為針對 MS-DOS 或 16 位 Windows 撰寫的應用程式可能無法存取以這個旗標建立的檔案。
FILE_FLAG_RANDOM_ACCESS
0x10000000
表示檔案是隨機存取的。 系統可使用這個做為最佳化檔案快取的提示。
FILE_FLAG_SEQUENTIAL_SCAN
0x08000000
表示檔案是按順序從開頭至結尾依序存取。 系統可使用這個做為最佳化檔案快取的提示。 如果應用程式藉移動檔案指標來進行隨機存取,則可能不會發生最佳快取;然而,仍然保證正確的作業。

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

FILE_FLAG_WRITE_THROUGH
0x80000000
指示系統透過任何中繼快取寫入,並直接移至磁片。 系統仍然可以快取寫入作業,但無法延遲排清。
 

如果控制碼代表具名管道的用戶端, dwFlags 參數也可以包含安全性服務品質資訊。 如需詳細資訊,請參閱 模擬層級。 當呼叫應用程式指定 SECURITY_SQOS_PRESENT 旗標時, dwFlags 參數可以包含下列一或多個值。

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

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

SECURITY_IDENTIFICATION
在識別模擬層級模擬用戶端模擬。
SECURITY_IMPERSONATION
在模擬模擬層級模擬用戶端。

傳回值

如果函式成功,則傳回值是指定檔案的開啟控制碼。

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

備註

dwFlags參數不能包含任何檔案屬性旗標, (FILE_ATTRIBUTE_*) 。 只有在建立檔案時,才能指定這些專案。

在 Windows 8 和 Windows Server 2012 中,下列技術支援此函式。

技術 支援
伺服器訊息區 (SMB) 3.0 通訊協定 Yes
SMB 3.0 透明容錯移轉 (TFO)
具有向外延展檔案共用的 SMB 3.0 (SO)
叢集共用磁片區檔案系統 (CsvFS) Yes
彈性檔案系統 (ReFS)

規格需求

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

另請參閱

CreateFile

檔案管理功能