Tengo un conjunto de aplicaciones Win32 que comparten información usando un segmento de memoria compartida creado con CreateFileMapping()
y MapViewOfFile()
. Una de las aplicaciones es un servicio del sistema; el resto lo inicia el usuario que ha iniciado sesión. En Windows XP, no hubo ningún problema. Llamamos a nuestros segmentos "Global \ Something" y todo estuvo bien.¿Cómo compartir la memoria entre servicios y procesos de usuario?
La seguridad adicional en Vista (y supuestamente en Windows 7) parece impedir que esta arquitectura funcione. Los usuarios normales no pueden crear objetos (error 5 de Win32) en el espacio de nombres global. MSDN indica que si la cuenta tiene el privilegio "crear global", entonces todo debería estar bien, pero esto no parece ser el caso en la práctica. Además, las características de "integridad" de Vista parecen impedir que los procesos de usuario de "baja integridad" accedan al objeto de memoria compartida creada por el servicio de "alta integridad". Parece que debería ser capaz de arreglar esto a través de un hechizo SetSecurityDescriptorSacl()
mágico, pero estoy teniendo dificultades para aprender a hablar sacl.
Así que la pregunta es: ¿Cuál es la forma correcta de usar un segmento de memoria compartida entre servicios y procesos de usuario normales?
Para adelantarse a la sencilla respuesta de "simplemente apague el UAC", estamos en un entorno bastante bloqueado y eso no es posible.
Editar: Tanto el servicio como el proceso de usuario necesitan acceso de lectura/escritura al segmento.
Desafortunadamente, los usuarios normales también tienen que tener acceso de escritura – Clay
Respuesta actualizada. Solo necesita modificar el descriptor de seguridad. – Michael
Buena respuesta: estamos en una extraña situación de seguridad. Se confía en que los usuarios finales interactúen con el sistema (por lo tanto, pueden modificar la memoria propiedad del servicio), pero se requiere que limitemos su acceso (UAC debe estar activado, etc.). Bienvenido a la locura del mundo de la red gubernamental. – Clay