Sto cercando di utilizzare MapViewOfFile in un processo a 64 bit su un file già mappato in memoria di un altro processo a 32 bit. Fallisce e mi dà un errore di "accesso negato". Si tratta di una limitazione nota di Windows o sto facendo qualcosa di sbagliato? Lo stesso codice funziona bene con 2 processi a 32 bit.MapViewOfFile condiviso tra processi a 32 bit e 64 bit
Il codice sorta di assomiglia a questo:
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);
Hai controllato se il percorso viene reindirizzato alla directory di VirtualStore? Process Monitor potrebbe aiutare. – bk1e