createfilemapping 예제

. 이 특성은 실행 가능한 이미지 파일 또는 데이터 파일(hfile 매개 변수는 파일에 대한 핸들)에 의해 뒷받침되는 파일 매핑 개체에는 영향을 주지 않습니다. 데이터를 공유하기 위해 여러 프로세스는 시스템 페이징 파일이 저장하는 메모리 매핑 파일을 사용할 수 있습니다. CreateFileMapping에 대한 기본 자습서는 여기를 참조하십시오. 연결된 코드에서 C++ DLL(SharedMem.DLL)은 맵 (사전/해시테이블)을 모방하여 프로세스 간에 사용할 수 있습니다. 데이터 공유는 MMF를 기반으로 합니다. SEC_LARGE_PAGES 호출자의 토큰에서 SeLockMemoryPrivilege 권한을 활성화해야 합니다. 정적 핸들 hMapObject = NULL; 파일 매핑 __declspec (dllexport) void SetSharedMem (LPWSTR lpszBuf) 코드와 샘플은 VB.NET, C # 및 C ++에서이 공유 메모리를 사용하는 방법을 설명합니다. 특성을 지정하지 않으면 SEC_COMMIT가 가정됩니다. BOOL WINAPI DllMain (HINSTANCE hinstDLL, // DLL 모듈 핸들 이 패턴은 코드를 약간 개선하여 가변 길이의 이진 데이터를 저장하고 검색하는 데 사용할 수 있습니다.// DLL 로드 라이브러리 로 인해 프로세스 초기화 또는 로드 라이브러리 첫 번째 프로세스는 INVALID_HANDLE_VALUE와 개체의 이름을 사용하여 CreateFileMapping 함수를 호출하여 파일 매핑 개체를 만듭니다.

PAGE_READWRITE 플래그를 사용하면 프로세스가 생성된 모든 파일 뷰를 통해 메모리에 대한 읽기/쓰기 권한을 부여합니다. . 이 코드는 프로덕션 코드에서 쉽게 사용할 수 있으므로 몇 가지 업데이트가 필요합니다. 정적 LPVOID lpvMem = NULL; 공유 메모리에 대한 포인터 예를 들어 명명된 공유 메모리 만들기 또는 큰 페이지를 사용하여 파일 매핑 만들기를 참조하십시오. 두 번째 프로세스는 첫 번째 프로세스로 매핑 개체에 대해 동일한 이름을 지정하는 OpenFileMapping 함수를 호출하여 첫 번째 프로세스에서 공유 메모리에 기록된 문자열에 액세스할 수 있습니다. 그런 다음 MapViewOfFile 함수를 사용하여 파일 뷰 pBuf에 대한 포인터를 얻을 수 있습니다. 프로세스는 이 문자열을 다른 문자열과 마찬가지로 표시할 수 있습니다. 이 예제에서 표시되는 메시지 상자에는 첫 번째 프로세스가 작성한 “첫 번째 프로세스의 메시지”라는 메시지가 포함되어 있습니다. 개발 // 여기에 사용되는 내보내기 메커니즘에서 지원하는 다른 내보내기 방법은 __declspec(export)입니다. 다음 예제에서는 DLL 진입점 함수가 파일 매핑 개체를 사용하여 프로세스에서 공유할 수 있는 메모리를 설정하는 방법을 보여 줍니다.

DLL을 로드합니다.