J'essaie d'utiliser MapViewOfFile dans un processus 64 bits sur un fichier qui est déjà mappé à la mémoire d'un autre processus 32 bits. Il échoue et me donne une erreur "accès refusé". Est-ce une limitation connue de Windows ou est-ce que je fais quelque chose de mal? Le même code fonctionne correctement avec 2 processus 32bit.MapViewOfFile partagé entre les processus 32 bits et 64 bits
Le code ressemble un peu comme ceci:
hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, szShmName);
if (NULL == hMapFile)
{ /* failed to open - create new (this happens in the 32 bit app) */
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = FALSE;
/* give access to members of administrators group */
BOOL success = ConvertStringSecurityDescriptorToSecurityDescriptor(
"D:(A;OICI;GA;;;BA)",
SDDL_REVISION_1,
&(sa.lpSecurityDescriptor),
NULL);
HANDLE hShmFile = CreateFile(FILE_XXX_SHM,
FILE_ALL_ACCESS, 0,
&sa,
OPEN_ALWAYS, 0, NULL);
hMapFile = CreateFileMapping(hShmFile, &sa, PAGE_READWRITE,
0,
SHM_SIZE,
szShmName);
CloseHandle(hShmFile);
}
// this one fails in 64 bit app
pShm = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, SHM_SIZE);
Avez-vous vérifié si le chemin est redirigé vers le répertoire VirtualStore? Process Monitor peut vous aider. – bk1e