具名管道開啟模式
管道伺服器會指定CreateNamedPipe函式之 dwOpenMode參數中的管道存取、重迭和寫入模式。 管道用戶端可以使用 CreateFile 函式,為其管道控制碼指定這些開啟模式。
存取模式
設定管道存取模式相當於指定與管道伺服器控制碼相關聯的讀取或寫入存取權。 下表顯示您可以使用 CreateNamedPipe指定之每個存取模式的對等泛型存取權。
存取模式 | 對等的泛型存取權 |
---|---|
PIPE_ACCESS_INBOUND | GENERIC_READ |
PIPE_ACCESS_OUTBOUND | GENERIC_WRITE |
PIPE_ACCESS_DUPLEX | GENERIC_READ |GENERIC_WRITE |
如果管道伺服器建立具有PIPE_ACCESS_INBOUND的管道,則管道伺服器是唯讀的,而管道用戶端則為唯讀的。 如果管道伺服器建立具有PIPE_ACCESS_OUTBOUND的管道,則管道是管道伺服器的寫入,而管道用戶端則是唯讀的。 使用PIPE_ACCESS_DUPLEX建立的管道是管道伺服器和管道用戶端的讀取/寫入。
使用 CreateFile 連接到具名管道的管道用戶端,必須在與管道伺服器所指定的存取模式相容的 dwDesiredAccess 參數中指定存取權限。 例如,用戶端必須指定GENERIC_READ存取權,以開啟管道伺服器使用 PIPE_ACCESS_OUTBOUND 建立的管道控制碼。 管道的所有實例都必須有相同的存取模式。
若要讀取管道屬性,例如讀取模式或封鎖模式,管道控制碼必須具有FILE_READ_ATTRIBUTES存取權限;若要寫入管道屬性,管道控制碼必須具有FILE_WRITE_ATTRIBUTES存取權限。 這些存取權限可以與適用于管道的一般存取權限結合:GENERIC_READ唯讀管道的FILE_WRITE_ATTRIBUTES,或針對唯讀管道使用FILE_READ_ATTRIBUTES GENERIC_WRITE。 以這種方式限制存取權限可提供更好的管道安全性。
重迭模式
在重迭模式中,執行冗長讀取、寫入和連接作業的函式可以立即傳回。 這可讓執行緒在背景中執行耗時的作業時執行其他作業。 若要指定重迭模式,請使用 FILE_FLAG_OVERLAPPED 旗標。 如需詳細資訊,請參閱 同步和重迭的輸入和輸出。
CreateFile函式可讓管道用戶端使用dwFlagsAndAttributes參數,為其管道控制碼設定重迭模式 (FILE_FLAG_OVERLAPPED) 。
Write-Through模式
使用 FILE_FLAG_WRITE_THROUGH 指定寫入模式。 此模式只會影響管線用戶端與不同電腦上的管道伺服器之間的位元組類型管道寫入作業。 在寫入模式中,寫入具名管道的函式在透過網路傳輸資料並傳送到遠端電腦上的管道緩衝區之前,不會傳回。 寫入模式適用于需要每次寫入作業同步處理的應用程式。
如果未啟用寫入模式,系統會緩衝處理資料,以提升網路作業的效率,直到累積最少的位元組數,或直到經過最長的時間週期為止。 緩衝可讓系統將多個寫入作業合併成單一網路傳輸。 這表示,在系統將資料放入輸出緩衝區之後,就可以順利完成寫入作業,但在系統透過網路傳輸資料之前。
CreateFile函式可讓管道用戶端使用dwFlagsAndAttributes參數設定管道控點的寫入模式 (FILE_FLAG_WRITE_THROUGH) 。 在建立管道控制碼之後,無法變更管道控制碼的寫入模式。 伺服器和用戶端控制碼對相同管道實例的寫入模式可能不同。
管道用戶端可以使用 SetNamedPipeHandleState 函式來控制寫入模式停用之管道的位元組數目和逾時期間。 對於唯讀管道,管道控制碼必須以GENERIC_READ開啟,並FILE_WRITE_ATTRIBUTES存取權限。