Geöffnete Named Pipe-Modi
Der Pipeserver gibt die Pipezugriffs-, Überlappungs- und Schreibzugriffsmodi im dwOpenMode-Parameter der CreateNamedPipe-Funktion an. Die Pipeclients können diese geöffneten Modi für ihre Pipehandles mithilfe der CreateFile-Funktion angeben.
Zugriffsmodus
Das Festlegen des Pipezugriffsmodus entspricht der Angabe des Lese- oder Schreibzugriffs, der den Handles des Pipeservers zugeordnet ist. Die folgende Tabelle zeigt das entsprechende generische Zugriffsrecht für jeden Zugriffsmodus, den Sie mit CreateNamedPipe angeben können.
Zugriffsmodus | 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 zum Herstellen einer Verbindung mit einer Named Pipe verwenden, müssen ein Zugriffsrecht im dwDesiredAccess-Parameter angeben, das mit dem vom Pipeserver angegebenen Zugriffsmodus kompatibel ist. 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.
Zum Lesen von Pipeattributen wie dem Lesemodus oder dem Blockierungsmodus muss das Pipehandle über das FILE_READ_ATTRIBUTES Zugriffsrecht verfügen. Zum Schreiben von Pipeattributen muss das Pipehandle über das Zugriffsrecht FILE_WRITE_ATTRIBUTES verfügen. Diese Zugriffsrechte können mit dem generischen Zugriffsrecht kombiniert werden, das für die Pipe geeignet ist: GENERIC_READ mit FILE_WRITE_ATTRIBUTES für eine schreibgeschützte Pipe oder GENERIC_WRITE mit FILE_READ_ATTRIBUTES für eine schreibgeschützte Pipe. 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 lange Lese-, Schreib- und Verbindungsvorgänge ausführen, sofort zurückgegeben werden. Dadurch kann der Thread andere Vorgänge ausführen, während ein zeitaufwändiger Vorgang im Hintergrund ausgeführt wird. Verwenden Sie zum Angeben des Überlappungsmodus das Flag FILE_FLAG_OVERLAPPED. Weitere Informationen finden Sie unter Synchrone und überlappende Eingabe und Ausgabe.
Mit der CreateFile-Funktion kann der Pipeclient den überlappenden Modus (FILE_FLAG_OVERLAPPED) für seine Pipehandles mithilfe des dwFlagsAndAttributes-Parameters festlegen.
Write-Through Modus
Geben Sie den Schreibzugriffsmodus mit FILE_FLAG_WRITE_THROUGH an. Dieser Modus wirkt sich nur auf Schreibvorgänge in Bytetyppipes zwischen Pipeclients und Pipeservern auf verschiedenen Computern aus. Im Schreibzugriffsmodus werden die Funktionen, die in eine Named Pipe schreiben, erst zurückgegeben, wenn die Daten über das Netzwerk und in den Puffer der Pipe auf dem Remotecomputer übertragen werden. Der Durchschreibmodus ist für Anwendungen nützlich, die eine Synchronisierung für jeden Schreibvorgang erfordern.
Wenn der Schreibzugriffsmodus nicht aktiviert ist, erhöht 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 einzelnen Netzwerkübertragung zu kombinieren. Dies bedeutet, dass ein Schreibvorgang erfolgreich abgeschlossen werden kann, nachdem das System die Daten in den ausgehenden Puffer einfügt, aber bevor das System sie über das Netzwerk überträgt.
Mit der CreateFile-Funktion kann der Pipeclient den Schreibzugriffsmodus (FILE_FLAG_WRITE_THROUGH) für seine Pipehandles mithilfe des dwFlagsAndAttributes-Parameters festlegen. Der Durchschreibmodus eines Pipehandles kann nicht geändert werden, nachdem das Pipehandle erstellt wurde. Der Schreibzugriffsmodus kann sich für Server- und Clienthandles von derselben Pipe instance unterscheiden.
Ein Pipeclient kann die SetNamedPipeHandleState-Funktion verwenden, um die Anzahl der Bytes und den Timeoutzeitraum vor der Übertragung für eine Pipe zu steuern, für die der Schreibmodus deaktiviert ist. Bei einer schreibgeschützten Pipe muss das Pipehandle mit den GENERIC_READ und FILE_WRITE_ATTRIBUTES-Zugriffsrechten geöffnet werden.