Estoy tratando de usar MapViewOfFile en un proceso de 64 bits en un archivo que ya está asignado a la memoria de otro proceso de 32 bits. Falló y me da un error de "acceso denegado". ¿Es esta una limitación conocida de Windows o estoy haciendo algo mal? El mismo código funciona bien con 2 procesos de 32 bits.MapViewOfFile compartido entre procesos de 32 bits y 64 bits
El código de tipo de parece a esto:
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);
¿Ha comprobado si la ruta se redirecciona al directorio de la VirtualStore? Process Monitor podría ayudar. – bk1e