J'ai développé une application Windows qui utilise de la mémoire partagée, c'est-à-dire des fichiers mappés en mémoire pour la communication interprocessus. J'ai un service Windows qui effectue un traitement et écrit périodiquement des données dans le fichier mappé en mémoire. J'ai une application Windows séparée qui lit à partir du fichier mappé en mémoire et affiche les informations. L'application fonctionne comme prévu sur Windows XP, XP Pro et Server 2003, mais PAS sur Vista.Autorisations d'accès à la mémoire partagée sous Windows
Je peux voir que les données écrites dans le fichier mappé en mémoire se passe correctement par le service Windows parce que je peux ouvrir le fichier avec un éditeur de texte et voir les messages stockés, mais l'application "consommateur" ne peut pas lire à partir du fichier. Une chose intéressante à noter ici, est que si je ferme l'application client et le redémarre, il consomme les messages qui ont été précédemment écrits dans le fichier mappé en mémoire.
Également, une autre chose étrange est que j'ai le même comportement lorsque je me connecte à l'hôte Windows à l'aide de Bureau à distance et invoque/utilise l'application grand public via le bureau à distance. Toutefois, si j'appelle le Bureau à distance et me connecte à la session de console de l'hôte cible avec la commande suivante: mstsc -v:servername /F -console
, tout fonctionne parfaitement. C'est pourquoi je pense que le problème est lié aux permissions. C'est ce que je veux dire. Quelqu'un peut-il commenter cela?
EDIT:
L'ACL que j'utilise pour créer le fichier mappé en mémoire et les objets Mutex que l'accès sychronize est comme suit:
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)");
Je pense que cela peut faire partie de la question .
Les documents partagés ne sont pas du tout sécurisés pour les fichiers IPC - ne faites pas cela. –