Modos abiertos de canalización con nombre
El servidor de canalización especifica los modos de acceso, superposición y escritura a través de canalización en el parámetro dwOpenMode de la función CreateNamedPipe . Los clientes de canalización pueden especificar estos modos abiertos para sus identificadores de canalización mediante la función CreateFile .
Modo de acceso
Establecer el modo de acceso de canalización equivale a especificar el acceso de lectura o escritura asociado a los identificadores del servidor de canalización. En la tabla siguiente se muestra el derecho de acceso genérico equivalente para cada modo de acceso que puede especificar con CreateNamedPipe.
Modo de acceso | Derecho de acceso genérico equivalente |
---|---|
PIPE_ACCESS_INBOUND | GENERIC_READ |
PIPE_ACCESS_OUTBOUND | GENERIC_WRITE |
PIPE_ACCESS_DUPLEX | GENERIC_READ | GENERIC_WRITE |
Si el servidor de canalización crea una canalización con PIPE_ACCESS_INBOUND, la canalización es de solo lectura para el servidor de canalización y solo escritura para el cliente de canalización. Si el servidor de canalización crea una canalización con PIPE_ACCESS_OUTBOUND, la canalización es de solo escritura para el servidor de canalización y solo lectura para el cliente de canalización. Una canalización creada con PIPE_ACCESS_DUPLEX es de lectura y escritura para el servidor de canalización y el cliente de canalización.
Los clientes de canalización que usan CreateFile para conectarse a una canalización con nombre deben especificar un derecho de acceso en el parámetro dwDesiredAccess compatible con el modo de acceso especificado por el servidor de canalización. Por ejemplo, un cliente debe especificar GENERIC_READ acceso para abrir un identificador para una canalización que el servidor de canalización creó con PIPE_ACCESS_OUTBOUND. Los modos de acceso deben ser los mismos para todas las instancias de una canalización.
Para leer atributos de canalización como el modo de lectura o el modo de bloqueo, el controlador de canalización debe tener el derecho de acceso FILE_READ_ATTRIBUTES; para escribir atributos de canalización, el identificador de canalización debe tener el derecho de acceso FILE_WRITE_ATTRIBUTES. Estos derechos de acceso se pueden combinar con el derecho de acceso genérico adecuado para la canalización: GENERIC_READ con FILE_WRITE_ATTRIBUTES para una canalización de solo lectura o GENERIC_WRITE con FILE_READ_ATTRIBUTES para una canalización de solo escritura. Restringir los derechos de acceso de esta manera proporciona una mejor seguridad para la canalización.
Modo superpuesto
En el modo superpuesto, las funciones que realizan operaciones largas de lectura, escritura y conexión pueden devolverse inmediatamente. Esto permite que el subproceso realice otras operaciones mientras se ejecuta una operación con mucho tiempo en segundo plano. Para especificar el modo superpuesto, use la marca FILE_FLAG_OVERLAPPED. Para obtener más información, vea Entrada y salida sincrónicas y superpuestas.
La función CreateFile permite al cliente de canalización establecer el modo superpuesto (FILE_FLAG_OVERLAPPED) para sus identificadores de canalización mediante el parámetro dwFlagsAndAttributes .
Modo de Write-Through
Especifique el modo de escritura a través con FILE_FLAG_WRITE_THROUGH. Este modo solo afecta a las operaciones de escritura en canalizaciones de tipo byte entre clientes de canalización y servidores de canalización en equipos diferentes. En el modo de escritura a través, las funciones que escriben en una canalización con nombre no devuelven hasta que los datos se transmiten a través de la red y al búfer de la canalización en el equipo remoto. El modo de escritura a través es útil para las aplicaciones que requieren sincronización para cada operación de escritura.
Si el modo de escritura a través no está habilitado, el sistema mejora la eficacia de las operaciones de red almacenando en búfer los datos hasta que haya acumulado un número mínimo de bytes o hasta que haya transcurrido un período de tiempo máximo. El almacenamiento en búfer permite al sistema combinar varias operaciones de escritura en una única transmisión de red. Esto significa que una operación de escritura se puede completar correctamente después de que el sistema coloque los datos en el búfer de salida, pero antes de que el sistema lo transmita a través de la red.
La función CreateFile permite al cliente de canalización establecer el modo de escritura a través (FILE_FLAG_WRITE_THROUGH) para sus identificadores de canalización mediante el parámetro dwFlagsAndAttributes . El modo de escritura a través de un identificador de canalización no se puede cambiar después de crear el identificador de canalización. El modo de escritura a través puede ser diferente para los identificadores de servidor y cliente en la misma instancia de canalización.
Un cliente de canalización puede usar la función SetNamedPipeHandleState para controlar el número de bytes y el período de tiempo de espera antes de la transmisión de una canalización en la que se deshabilita el modo de escritura a través. Para una canalización de solo lectura, el identificador de canalización debe abrirse con los derechos de acceso GENERIC_READ y FILE_WRITE_ATTRIBUTES.