He desarrollado una aplicación de Windows que usa memoria compartida --- es decir --- archivos mapeados en memoria para comunicación entre procesos. Tengo un servicio de Windows que procesa y escribe datos periódicamente en el archivo asignado a la memoria. Tengo una aplicación de Windows separada que lee desde el archivo mapeado en la memoria y muestra la información. La aplicación funciona como se esperaba en Windows XP, XP Pro y Server 2003, pero NO en Vista.Permisos de acceso a memoria compartida en Windows
Puedo ver que los datos que se escriben en el archivo mapeado de memoria están sucediendo correctamente en el servicio de Windows porque puedo abrir el archivo con un editor de texto y ver los mensajes almacenados, pero la aplicación "consumidor" no puede leer del archivo. Una cosa interesante a tener en cuenta aquí, es que si cierro la aplicación de consumidor y la reinicio, consume los mensajes que se escribieron previamente en el archivo mapeado de memoria.
Además, otra cosa extraña es que obtengo el mismo comportamiento cuando me conecto al host de Windows usando Escritorio remoto e invoco/uso la aplicación del consumidor a través del escritorio remoto. Sin embargo, si invoco el Escritorio remoto y me conecto a la sesión de la consola del host de destino con el siguiente comando: mstsc -v:servername /F -console
, todo funciona perfectamente.
Por eso creo que el problema está relacionado con los permisos. ¿Alguien puede comentar sobre esto?
EDIT:
La ACL que estoy usando para crear el archivo de memoria asignada y los objetos mutex que sychronize acceso es el siguiente:
TCHAR * szSD = TEXT("D:")
TEXT("(A;;RPWPCCDCLCSWRCWDWOGAFA;;;S-1-1-0)")
TEXT("(A;;GA;;;BG)")
TEXT("(A;;GA;;;AN)")
TEXT("(A;;GA;;;AU)")
TEXT("(A;;GA;;;LS)")
TEXT("(A;;GA;;;RD)")
TEXT("(A;;GA;;;WD)")
TEXT("(A;;GA;;;BA)");
Creo que esto puede ser parte de la cuestión .
Los documentos compartidos son una ubicación muy insegura para los archivos relacionados con IPC; no lo haga. –