Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Serwer potoku określa tryby dostępu potoku, nakładania się i zapisu w dwOpenMode parametru CreateNamedPipe. Klienci potoku mogą określić te tryby otwierania dla ich uchwytów potoków przy użyciu funkcji CreateFile.
Tryb dostępu
Ustawienie trybu dostępu potoku jest równoważne określeniu dostępu do odczytu lub zapisu skojarzonego z uchwytami serwera potoku. W poniższej tabeli przedstawiono równoważne ogólne prawo dostępu dla każdego trybu dostępu, które można określić za pomocą CreateNamedPipe.
| Tryb dostępu | Równoważne ogólne prawo dostępu |
|---|---|
| PIPE_ACCESS_INBOUND | GENERIC_READ |
| PIPE_ACCESS_OUTBOUND | GENERIC_WRITE |
| PIPE_ACCESS_DUPLEX | GENERIC_READ | GENERIC_WRITE |
Jeśli serwer potoku tworzy potok z PIPE_ACCESS_INBOUND, potok jest tylko do odczytu dla serwera potoku i tylko do zapisu dla klienta potoku. Jeśli serwer potoku tworzy potok z PIPE_ACCESS_OUTBOUND, potok jest przeznaczony tylko do zapisu dla serwera potoku i tylko do odczytu dla klienta potoku. Potok utworzony za pomocą PIPE_ACCESS_DUPLEX jest odczytywany/zapisywany zarówno dla serwera potoku, jak i klienta potoku.
Klienci potoku używający CreateFile, aby nawiązać połączenie z nazwanym potokiem, muszą określić prawo dostępu w dwDesiredAccess parametr, który jest zgodny z trybem dostępu określonym przez serwer potoku. Na przykład klient musi określić GENERIC_READ dostęp, aby otworzyć dojście dla potoku utworzonego za pomocą PIPE_ACCESS_OUTBOUND. Tryby dostępu muszą być takie same dla wszystkich wystąpień potoku.
Aby odczytać atrybuty potoku, takie jak tryb odczytu lub tryb blokowania, uchwyt potoku musi mieć prawo dostępu FILE_READ_ATTRIBUTES; aby zapisywać atrybuty potoku, uchwyt potoku musi mieć prawo dostępu FILE_WRITE_ATTRIBUTES. Te prawa dostępu można połączyć z ogólnym prawem dostępu odpowiednim dla potoku: GENERIC_READ z FILE_WRITE_ATTRIBUTES dla potoku tylko do odczytu lub GENERIC_WRITE z FILE_READ_ATTRIBUTES dla potoku tylko do zapisu. Ograniczenie praw dostępu w ten sposób zapewnia lepsze zabezpieczenia potoku.
Tryb nakładany
W trybie nakładających się funkcje wykonujące długie operacje odczytu, zapisu i łączenia mogą zwracać natychmiast. Dzięki temu wątek może wykonywać inne operacje, podczas gdy czasochłonna operacja jest wykonywana w tle. Aby określić tryb nakładany, użyj flagi FILE_FLAG_OVERLAPPED. Aby uzyskać więcej informacji, zobacz synchroniczne i nakładające się dane wejściowe i wyjściowe.
Funkcja CreateFile umożliwia klientowi potoku ustawienie trybu nakładających się (FILE_FLAG_OVERLAPPED) dla uchwytów potoku przy użyciu parametru dwFlagsAndAttributes.
Tryb Write-Through
Określ tryb zapisu przy użyciu FILE_FLAG_WRITE_THROUGH. Ten tryb ma wpływ tylko na operacje zapisu do potoków typu bajtowego między klientami potoku i serwerami potoku na różnych komputerach. W trybie zapisu funkcje zapisu w nazwanym potoku nie są zwracane, dopóki dane nie zostaną przesłane przez sieć i do buforu potoku na komputerze zdalnym. Tryb zapisu jest przydatny w przypadku aplikacji wymagających synchronizacji dla każdej operacji zapisu.
Jeśli tryb zapisu nie jest włączony, system zwiększa wydajność operacji sieciowych przez buforowanie danych do momentu zakumulowania minimalnej liczby bajtów lub do czasu upływu maksymalnego okresu. Buforowanie umożliwia systemowi łączenie wielu operacji zapisu w jedną transmisję sieciową. Oznacza to, że operacja zapisu może zostać pomyślnie ukończona po tym, jak system umieści dane w buforze wychodzącym, ale przed przesłaniem go przez system przez sieć.
Funkcja CreateFile umożliwia klientowi potoku ustawienie trybu zapisu (FILE_FLAG_WRITE_THROUGH) dla uchwytów potoku przy użyciu parametru dwFlagsAndAttributes. Nie można zmienić trybu zapisu uchwytu potoku po utworzeniu uchwytu potoku. Tryb zapisu może być inny w przypadku obsługi serwera i klienta w tym samym wystąpieniu potoku.
Klient potoku może użyć funkcji SetNamedPipeHandleState do kontrolowania liczby bajtów i limitu czasu przed transmisją potoku, na którym tryb zapisu jest wyłączony. W przypadku potoku tylko do odczytu uchwyt potoku musi być otwarty z prawami dostępu GENERIC_READ i FILE_WRITE_ATTRIBUTES.