GetMappedFileNameの動作例(C言語)

説明:

二つのファイルから作成した二つのファイルマッピングオブジェクトのビュー、ページングファイル上のファイルマッピングオブジェクトのビュー、普通のメモリの四つの対象に対して、GetMappedFileNameが返すファイル名を表示させる。

四つの対象のうち、前者の二つのみ正常に動作し、後者二つはエラーとなる。

キーワード:

GetMappedFileName

サンプルコード:

/* GetMappedFileNameのテスト */
void TestMappedFileName()
{
	HANDLE hAbcFile, hDefFile;
	HANDLE hAbcMap, hDefMap, hMemMap;
	void *pAbcView, *pDefView, *pMemView;
	char FileName[1000];
	BOOL dwResult;
	DWORD tmp;

	/* "abc.map"というファイルのファイルマッピングオブジェクトを作成し、ビューを割り当てる */
	hAbcFile = CreateFile("abc.map", GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, NULL);
	hAbcMap = CreateFileMapping(hAbcFile, NULL, PAGE_READWRITE, 0, 0x10000, "abc file mapping object");
	pAbcView = MapViewOfFile(hAbcMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
	CloseHandle(hAbcFile);

	/* "def.map"というファイルのファイルマッピングオブジェクトを作成し、ビューを割り当てる */
	hDefFile = CreateFile("def.map", GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, NULL);
	hDefMap = CreateFileMapping(hDefFile, NULL, PAGE_READWRITE, 0, 0x10000, "def file mapping object");
	pDefView = MapViewOfFile(hDefMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
	CloseHandle(hDefFile);

	/* メモリ上のファイルマッピングオブジェクトを作成し、ビューを割り当てる */
	hMemMap = CreateFileMapping((HANDLE)0xffffffff, NULL, PAGE_READWRITE, 0, 0x10000, "memory file mapping object");
	pMemView = MapViewOfFile(hMemMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);

	/* abc のビューを元にファイル名を求める */
	printf("abc view: ");
	dwResult = GetMappedFileName(GetCurrentProcess(), pAbcView, FileName, 1000);
	if(dwResult != 0) printf("%s\n", FileName);
	else printf("unknown\n");

	/* def のビューを元にファイル名を求める */
	printf("def view: ");
	dwResult = GetMappedFileName(GetCurrentProcess(), pDefView, FileName, 1000);
	if(dwResult != 0) printf("%s\n", FileName);
	else printf("unknown\n");

	/* メモリ上のビューを元にファイル名を求める(失敗する) */
	printf("mem view: ");
	dwResult = GetMappedFileName(GetCurrentProcess(), pMemView, FileName, 1000);
	if(dwResult != 0) printf("%s\n", FileName);
	else printf("unknown\n");

	/* 普通のメモリ上のポインタを渡したときの反応(失敗する) */
	printf("normal memory: ");
	dwResult = GetMappedFileName(GetCurrentProcess(), &tmp, FileName, 1000);
	if(dwResult != 0) printf("%s\n", FileName);
	else printf("unknown\n");

	/* 後処理 */
	UnmapViewOfFile(pAbcView);
	UnmapViewOfFile(pDefView);
	UnmapViewOfFile(pMemView);
	CloseHandle(hAbcMap);
	CloseHandle(hDefMap);
	CloseHandle(hMemMap);
}



(original text:1999/01/07 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。