Partilhar via


Modos de abertura de pipe nomeado

O servidor de pipe especifica os modos de acesso, sobreposição e gravação do pipe no parâmetro dwOpenMode da funçãoCreateNamedPipe. Os clientes de pipe podem especificar esses modos abertos para suas alças de pipe usando a função CreateFile.

Modo de Acesso

Definir o modo de acesso do pipe é equivalente a especificar o acesso de leitura ou gravação associado às alças do servidor de pipe. A tabela a seguir mostra o direito de acesso genérico equivalente para cada modo de acesso que você pode especificar com CreateNamedPipe.

Modo de acesso Direito de acesso genérico equivalente
PIPE_ACCESS_INBOUND GENERIC_READ
PIPE_ACCESS_OUTBOUND GENERIC_WRITE
PIPE_ACCESS_DUPLEX GENERIC_READ | GENERIC_WRITE

 

Se o servidor de pipe criar um pipe com PIPE_ACCESS_INBOUND, o pipe será somente leitura para o servidor de pipe e somente gravação para o cliente de pipe. Se o servidor de pipe criar um pipe com PIPE_ACCESS_OUTBOUND, o pipe será somente gravação para o servidor de pipe e somente leitura para o cliente de pipe. Um pipe criado com PIPE_ACCESS_DUPLEX é leitura/gravação para o servidor de pipe e o cliente de pipe.

Os clientes de pipe que usam CreateFile para se conectar a um pipe nomeado devem especificar um direito de acesso no parâmetro dwDesiredAccess que seja compatível com o modo de acesso especificado pelo servidor de pipe. Por exemplo, um cliente deve especificar GENERIC_READ acesso para abrir uma alça para um pipe que o servidor de pipe criou com PIPE_ACCESS_OUTBOUND. Os modos de acesso devem ser os mesmos para todas as instâncias de um tubo.

Para ler atributos do tubo, como o modo de leitura ou o modo de bloqueio, a alça do tubo deve ter o direito de acesso FILE_READ_ATTRIBUTES; Para escrever atributos de pipe, a alça de pipe deve ter o direito de acesso FILE_WRITE_ATTRIBUTES. Esses direitos de acesso podem ser combinados com o direito de acesso genérico apropriado para o pipe: GENERIC_READ com FILE_WRITE_ATTRIBUTES para um pipe somente leitura ou GENERIC_WRITE com FILE_READ_ATTRIBUTES para um pipe somente gravação. Restringir os direitos de acesso desta forma proporciona uma melhor segurança para o tubo.

Modo sobreposto

No modo sobreposto, as funções que executam longas operações de leitura, gravação e conexão podem retornar imediatamente. Isso permite que o thread execute outras operações enquanto uma operação demorada está sendo executada em segundo plano. Para especificar o modo sobreposto, use o sinalizador FILE_FLAG_OVERLAPPED. Para obter mais informações, consulte de entrada e saída síncrona e sobreposta .

A função CreateFile permite que o cliente de pipe defina o modo sobreposto (FILE_FLAG_OVERLAPPED) para suas alças de pipe usando o parâmetro dwFlagsAndAttributes.

Modo Write-Through

Especifique o modo de gravação com FILE_FLAG_WRITE_THROUGH. Esse modo afeta apenas operações de gravação em pipes do tipo byte entre clientes de pipe e servidores de pipe em computadores diferentes. No modo de gravação, as funções que gravam em um pipe nomeado não retornam até que os dados sejam transmitidos pela rede e no buffer do pipe no computador remoto. O modo de gravação é útil para aplicativos que exigem sincronização para cada operação de gravação.

Se o modo de gravação não estiver habilitado, o sistema aumenta a eficiência das operações de rede armazenando dados em buffer até que um número mínimo de bytes tenha se acumulado ou até que um período de tempo máximo tenha decorrido. O buffer permite que o sistema combine várias operações de gravação em uma única transmissão de rede. Isso significa que uma operação de gravação pode ser concluída com êxito depois que o sistema coloca os dados no buffer de saída, mas antes que o sistema os transmita pela rede.

A função CreateFile permite que o cliente de pipe defina o modo de gravação (FILE_FLAG_WRITE_THROUGH) para suas alças de pipe usando o parâmetro dwFlagsAndAttributes. O modo de gravação de uma alça de tubo não pode ser alterado após a criação da alça de pipe. O modo de gravação pode ser diferente para identificadores de servidor e cliente para a mesma instância de pipe.

Um cliente de pipe pode usar a função SetNamedPipeHandleState para controlar o número de bytes e o período de tempo limite antes da transmissão para um pipe no qual o modo de gravação está desativado. Para um tubo somente leitura, a alça do tubo deve ser aberta com os direitos de acesso GENERIC_READ e FILE_WRITE_ATTRIBUTES.