Ho sviluppato un'applicazione Windows che utilizza memoria condivisa --- vale a dire --- file mappati in memoria per la comunicazione tra processi. Ho un servizio di Windows che fa un po 'di elaborazione e scrive periodicamente i dati nel file mappato in memoria. Ho un'applicazione Windows separata che legge dal file mappato in memoria e visualizza le informazioni. L'applicazione funziona come previsto su Windows XP, XP Pro e Server 2003, ma NON su Vista.Autorizzazioni di accesso alla memoria condivisa su Windows
Posso vedere che i dati scritti nel file mappato in memoria stanno accadendo correttamente dal servizio Windows perché posso aprire il file con un editor di testo e vedere i messaggi memorizzati, ma l'applicazione "consumer" non può leggere dal file. Una cosa interessante da notare qui è che se chiudo l'applicazione consumer e la riavvio, consuma i messaggi che sono stati precedentemente scritti nel file mappato in memoria.
Inoltre, un'altra cosa strana è che ottengo lo stesso comportamento quando mi collego all'host di Windows utilizzando Remote Desktop e invoco/utilizzo l'applicazione consumer tramite desktop remoto. Tuttavia, se invoco Desktop remoto e mi connetto alla sessione della console dell'host di destinazione con il seguente comando: mstsc -v:servername /F -console
, tutto funziona perfettamente.
Ecco perché penso che il problema sia relativo alle autorizzazioni. Qualcuno può commentare questo?
EDIT:
L'ACL che sto usando per creare il file di memoria mappata e gli oggetti mutex che sychronize accesso è la seguente:
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)");
Penso che questo possa essere parte del problema .
I documenti condivisi sono una posizione altamente insicura per i file relativi a IPC: non farlo. –