Compartilhar via


Modos abertos de pipe nomeados

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

Modo de acesso

Definir o modo de acesso de pipe é equivalente a especificar o acesso de leitura ou gravação associado aos identificadores 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 é de 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 acesso diretamente no parâmetro dwDesiredAccess compatível com o modo de acesso especificado pelo servidor de pipe. Por exemplo, um cliente deve especificar GENERIC_READ acesso para abrir um identificador 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 pipe.

Para ler atributos de pipe, como o modo de leitura ou o modo de bloqueio, o identificador de pipe deve ter o acesso FILE_READ_ATTRIBUTES correto; para gravar atributos de pipe, o identificador de pipe deve ter o acesso FILE_WRITE_ATTRIBUTES direito. 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 dessa forma fornece melhor segurança para o pipe.

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 Entrada e saída síncronas e sobrepostas.

A função CreateFile permite que o cliente de pipe defina o modo sobreposto (FILE_FLAG_OVERLAPPED) para seus identificadores 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 para o 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 aumentará a eficiência das operações de rede armazenando dados em buffer até que um número mínimo de bytes tenha acumulado ou até que um período 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 seus identificadores de pipe usando o parâmetro dwFlagsAndAttributes . O modo de gravação de um identificador de pipe não pode ser alterado após a criação do identificador 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á desabilitado. Para um pipe somente leitura, o identificador de pipe deve ser aberto com os direitos de acesso GENERIC_READ e FILE_WRITE_ATTRIBUTES.