Derechos de acceso y seguridad de canalización con nombre

La seguridad de Windows permite controlar el acceso a canalizaciones con nombre. Para obtener más información sobre la seguridad, consulte Modelo de control de acceso.

Puede especificar un descriptor de seguridad para una canalización con nombre al llamar a la función CreateNamedPipe . El descriptor de seguridad controla el acceso a los extremos de cliente y servidor de la canalización con nombre. Si especifica NULL, la canalización con nombre obtiene un descriptor de seguridad predeterminado. Las ACL del descriptor de seguridad predeterminado para una canalización con nombre conceden control total a la cuenta localSystem, los administradores y el propietario del creador. También conceden acceso de lectura a los miembros del grupo Todos y a la cuenta anónima.

Para recuperar el descriptor de seguridad de una canalización con nombre, llame a la función GetSecurityInfo . Para cambiar el descriptor de seguridad de una canalización con nombre, llame a la función SetSecurityInfo .

Cuando un subproceso llama a CreateNamedPipe para abrir un identificador al final del servidor de una canalización con nombre existente, el sistema realiza una comprobación de acceso antes de devolver el identificador. La comprobación de acceso compara el token de acceso del subproceso y los derechos de acceso solicitados con la DACL en el descriptor de seguridad de la canalización con nombre. Además de los derechos de acceso solicitados, la DACL debe permitir que el subproceso de llamada FILE_CREATE_PIPE_INSTANCE acceso a la canalización con nombre.

Del mismo modo, cuando un cliente llama a la función CreateFile o CallNamedPipe para conectarse al final del cliente de una canalización con nombre, el sistema realiza una comprobación de acceso antes de conceder acceso al cliente.

El identificador devuelto por la función CreateNamedPipe siempre tiene acceso SYNCHRONIZE. También tiene GENERIC_READ, GENERIC_WRITE o ambos, dependiendo del modo abierto de la canalización. A continuación se muestran los derechos de acceso para cada modo abierto.

Modo abierto Derechos de acceso
PIPE_ACCESS_DUPLEX (0x00000003) FILE_GENERIC_READ, FILE_GENERIC_WRITE y SYNCHRONIZE
PIPE_ACCESS_INBOUND (0x00000001) FILE_GENERIC_READ y SYNCHRONIZE
PIPE_ACCESS_OUTBOUND (0x00000002) FILE_GENERIC_WRITE y SYNCHRONIZE

 

FILE_GENERIC_READ acceso para una canalización con nombre combina los derechos para leer datos de la canalización, leer atributos de canalización, leer atributos extendidos y leer la DACL de la canalización.

FILE_GENERIC_WRITE acceso para una canalización con nombre combina los derechos para escribir datos en la canalización, anexarlos a ella, escribir atributos de canalización, escribir atributos extendidos y leer la DACL de la canalización. Dado que FILE_APPEND_DATA y FILE_CREATE_PIPE_INSTANCE tienen la misma definición, por lo que FILE_GENERIC_WRITE permite crear la canalización. Para evitar este problema, use los derechos individuales en lugar de usar FILE_GENERIC_WRITE.

Puede solicitar el derecho de acceso ACCESS_SYSTEM_SECURITY a un objeto de canalización con nombre si desea leer o escribir la SACL del objeto. Para obtener más información, consulte Access-Control Lists (ACL) y SACL Access Right.

Para evitar que los usuarios remotos o los usuarios de una sesión de terminal services diferente accedan a una canalización con nombre, use el SID de inicio de sesión en la DACL para la canalización. El SID de inicio de sesión también se usa en inicios de sesión como inicios de sesión; es el SID que se usa para proteger el espacio de nombres de objeto por sesión. Para obtener más información, vea Obtención del SID de inicio de sesión en C++.