이미 다른 32 비트 프로세스의 메모리에 매핑 된 파일의 64 비트 프로세스에서 MapViewOfFile을 사용하려고합니다. 그것은 실패하고 나에게 "접근 거부"오류를 준다. 이 문제는 알려진 Windows 제한 사항입니까 아니면 잘못 되었습니까? 동일한 코드가 2 개의 32 비트 프로세스에서 잘 작동합니다.MapViewOfFile이 32 비트와 64 비트 프로세스간에 공유됩니다.
는코드는 일종의 다음과 같습니다 : 32 비트 응용 프로그램에서 CreateFile에를 호출 할 때
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);
경로가 VirtualStore 디렉터리로 리디렉션되고 있는지 확인 했습니까? 프로세스 모니터가 도움이 될 수 있습니다. – bk1e