void MMF(WCHAR* szPath)
{
HANDLE hFile = INVALID_HANDLE_VALUE;
HANDLE hMap = INVALID_HANDLE_VALUE;
LPVOID pBuf;
hFile = CreateFile(
szPath,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if (hFile == INVALID_HANDLE_VALUE)
{
printf("CreateFile Fail : %d\n\n", GetLastError());
return;
}
hMap = CreateFileMapping(
hFile,
NULL,
PAGE_READWRITE,
0,
0,
NULL
);
if (hMap == INVALID_HANDLE_VALUE)
{
printf("CreateFileMapping Fail : %d\n\n", GetLastError());
return;
}
pBuf = MapViewOfFile(
hMap,
FILE_MAP_ALL_ACCESS,
0,
0,
0
);
if (pBuf == NULL)
{
printf("MapViewOfFile Fail : %d\n\n", GetLastError());
return;
}
UnmapViewOfFile(pBuf);
CloseHandle(hFile);
CloseHandle(hMap);
}
[작동 순서]
1. 메모리 매핑할 szPath의 값을 받는 OpenM 함수 생성
2. 각각 CreateFile과 CreateFileMapping 함수값을 받을 hFile, hMap 핸들 객체 생성
3. CreateFile에서 szPath가 존재하면 I/O 권한을 부여받은 hFile 핸들 객체 열기
4. CreateFileMapping에서 hFile에 대해 I/O 권한을 부여받은 hMap 파일 매핑 객체 열기
5. hMap의 주소 공간에 대해 모든 매핑 권한으로 매핑한 pBuf 뷰 반환
6. pBuf에 관해 언매핑
7. hFile과 hMap 핸들 닫기
제가 이해한 것으로는...
가상 머신에 파일에 대한 주소 공간을 매핑하여 파일을 직접 읽고 쓰는 것보다 좀 더 빠르게 읽고 쓰는 것
ㄴ 메모리 매핑 파일
이라고 알고 있습니다.
비록 저는 사용에 실패하여 코드만 이렇게 남기지만... 언젠가 누군가한테는 유용할 거라 생각하여 남깁니다.
[Source]
CreateFileA function (fileapi.h) - Win32 apps | Microsoft Docs
CreateFileMappingA function (winbase.h) - Win32 apps | Microsoft Docs
MapViewOfFile function (memoryapi.h) - Win32 apps | Microsoft Docs
'IT' 카테고리의 다른 글
LG 울트라 PC GT(15U780-PA70K) - Big Sur 11.6.5 & OpenCore 0.7.9 설치 (0) | 2022.03.26 |
---|---|
스터디그룹 프로젝트 - 화이트리스트 기반 안티 바이러스 프로그램 2차 완성 (0) | 2022.03.15 |
[Python] DB 데이터 TXT 파일로 추출 (0) | 2022.03.14 |
스터디그룹 프로젝트 - 화이트리스트 안티 바이러스 프로그램 1차 완성 (0) | 2022.03.07 |
스터디그룹 프로젝트 원하던 기능까지 구현 완료 (0) | 2022.03.02 |