Offene Modi für benannte Pipe
Der Pipeserver gibt den Pipezugriffs-, Überlapp- und Schreibzugriffsmodus im dwOpenMode Parameter der CreateNamedPipe-Funktion an. Die Pipeclients können diese offenen Modi für ihre Ziehpunkte mithilfe der CreateFile--Funktion angeben.
Zugriffsart
Das Festlegen des Pipezugriffsmodus entspricht dem Angeben des Lese- oder Schreibzugriffs, der den Ziehpunkten des Pipeservers zugeordnet ist. In der folgenden Tabelle ist das entsprechende allgemeine Zugriffsrecht für jeden Zugriffsmodus aufgeführt, den Sie mit CreateNamedPipe-angeben können.
Zugriffsart | Gleichwertiges generisches Zugriffsrecht |
---|---|
PIPE_ACCESS_INBOUND | GENERIC_READ |
PIPE_ACCESS_OUTBOUND | GENERIC_WRITE |
PIPE_ACCESS_DUPLEX | GENERIC_READ | GENERIC_WRITE |
Wenn der Pipeserver eine Pipe mit PIPE_ACCESS_INBOUND erstellt, ist die Pipe schreibgeschützt für den Pipeserver und schreibgeschützt für den Pipeclient. Wenn der Pipeserver eine Pipe mit PIPE_ACCESS_OUTBOUND erstellt, ist die Pipe schreibgeschützt für den Pipeserver und schreibgeschützt für den Pipeclient. Eine mit PIPE_ACCESS_DUPLEX erstellte Pipe ist sowohl für den Pipeserver als auch für den Pipeclient lese-/schreibzugriff.
Pipeclients, die CreateFile- verwenden, um eine Verbindung mit einer benannten Pipe herzustellen, müssen im dwDesiredAccess Parameter, der mit dem vom Pipeserver angegebenen Zugriffsmodus kompatibel ist, angeben. Beispielsweise muss ein Client GENERIC_READ Zugriff angeben, um ein Handle für eine Pipe zu öffnen, die der Pipeserver mit PIPE_ACCESS_OUTBOUND erstellt hat. Die Zugriffsmodi müssen für alle Instanzen einer Pipe identisch sein.
Um Pipeattribute wie den Lesemodus oder den Sperrmodus zu lesen, muss der Rohrziehpunkt über das FILE_READ_ATTRIBUTES Zugriffsrecht verfügen; zum Schreiben von Pipeattributen muss der Ziehpunkt über das FILE_WRITE_ATTRIBUTES Zugriffsrecht verfügen. Diese Zugriffsrechte können mit dem allgemeinen Zugriffsrecht kombiniert werden, das für die Pipe geeignet ist: GENERIC_READ mit FILE_WRITE_ATTRIBUTES für eine schreibgeschützte Pfeife oder GENERIC_WRITE mit FILE_READ_ATTRIBUTES für eine schreibgeschützte Pfeife. Das Einschränken von Zugriffsrechten auf diese Weise bietet eine bessere Sicherheit für die Pipe.
Überlappender Modus
Im überlappenden Modus können Funktionen, die langwierige Lese-, Schreib- und Verbindungsvorgänge ausführen, sofort zurückgegeben werden. Dadurch kann der Thread andere Vorgänge ausführen, während ein zeitaufwendiger Vorgang im Hintergrund ausgeführt wird. Verwenden Sie zum Angeben des überlappenden Modus das FILE_FLAG_OVERLAPPED Flag. Weitere Informationen finden Sie unter Synchrone und überlappende Eingabe- und Ausgabe-.
Die CreateFile--Funktion ermöglicht dem Pipeclient das Festlegen des überlappenden Modus (FILE_FLAG_OVERLAPPED) für seine Ziehpunkte mithilfe des dwFlagsAndAttributes-Parameters.
Write-Through Modus
Geben Sie den Schreibmodus mit FILE_FLAG_WRITE_THROUGH an. Dieser Modus wirkt sich nur auf Schreibvorgänge in Bytetyp-Rohre zwischen Pipeclients und Pipeservern auf verschiedenen Computern aus. Im Schreibmodus geben die Funktionen, die in eine benannte Pipe schreiben, erst zurück, wenn die Daten über das Netzwerk und in den Puffer des Rohrs auf dem Remotecomputer übertragen werden. Der Schreibmodus ist für Anwendungen nützlich, für die für jeden Schreibvorgang eine Synchronisierung erforderlich ist.
Wenn der Schreibmodus nicht aktiviert ist, verbessert das System die Effizienz von Netzwerkvorgängen, indem Daten gepuffert werden, bis eine minimale Anzahl von Bytes angesammelt wurde oder bis ein maximaler Zeitraum abgelaufen ist. Die Pufferung ermöglicht es dem System, mehrere Schreibvorgänge in einer einzigen Netzwerkübertragung zu kombinieren. Dies bedeutet, dass ein Schreibvorgang erfolgreich abgeschlossen werden kann, nachdem das System die Daten in den ausgehenden Puffer versetzt hat, aber bevor das System sie über das Netzwerk überträgt.
Die CreateFile--Funktion ermöglicht dem Pipeclient das Festlegen des Schreibmodus (FILE_FLAG_WRITE_THROUGH) für seine Pipehandles mithilfe des dwFlagsAndAttributes-Parameters. Der Schreibmodus eines Rohrziehpunkts kann nicht geändert werden, nachdem der Rohrziehpunkt erstellt wurde. Der Schreib-Through-Modus kann für Server- und Clienthandles für dieselbe Pipeinstanz unterschiedlich sein.
Ein Pipeclient kann die SetNamedPipeHandleState Funktion verwenden, um die Anzahl der Bytes und den Timeoutzeitraum vor der Übertragung für eine Pipe zu steuern, in der der Schreibmodus deaktiviert ist. Für ein schreibgeschütztes Rohr muss der Rohrziehpunkt mit dem GENERIC_READ und FILE_WRITE_ATTRIBUTES Zugriffsrechten geöffnet werden.