GetModuleFileNameEx モジュールのフルパス名を取得

Cの宣言:

DWORD GetModuleFileNameEx(
	HANDLE hProcess,
	HMODULE hModule,
	LPTSTR FileName,
	DWORD FileNameSize);

説明:

hProcessで指定されたプロセスがロードしている、hModuleで指定されたモジュールのフルパス名を取得し、結果をFileNameに返す。

GetModuleFileNameとの違いは、他のプロセスに対して行うことが可能かどうかと言う点である。

引数の意味は以下の通り。
hProcess (IN) 情報の取得元のプロセスのハンドル。
hModule (IN) 情報の取得元のモジュールのハンドル。
FileName (OUT) 取得結果のフルパス名。
FileNameSize (IN) FileNameのサイズ。

戻り値は、FileNameに設定されたフルパス名のサイズである。関数の実行に失敗した場合、0が返される。

Cのサンプル:

現在起動している全てのプロセスを列挙し、各々のプロセスについて、ロードしている全てのモジュールのファイル名を表示する。
/* 現在起動している全てのプロセス中の全てのモジュールのファイル名を表示 */
void DispAllModules()
{
	DWORD ProcessIDs[1000];
	DWORD ProcessNum;
	HMODULE Modules[1000];
	DWORD ModuleNum;
	char FileName[1000];
	DWORD RetSize;
	DWORD i, j;
	HANDLE hProcess;
	BOOL bResult;

	/* プロセスの一覧と数を取得 */
	EnumProcesses(ProcessIDs, sizeof(ProcessIDs), &RetSize);
	ProcessNum = RetSize / sizeof(DWORD);

	for(i=0; i<ProcessNum; i++) {
		printf("プロセスID: %x\n", ProcessIDs[i]);
		
		hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, ProcessIDs[i]);

		if(hProcess == NULL) {
			printf("\tオープン失敗.\n");
		} else {
			/* プロセス中のモジュールの一覧を取得 */
			bResult = EnumProcessModules(hProcess, Modules, sizeof(Modules), &RetSize);
			if(bResult) {
				ModuleNum = RetSize / sizeof(HMODULE);

				/* 各モジュールのファイル名を表示 */
				for(j=0; j<ModuleNum; j++) {
					GetModuleFileNameEx(hProcess, Modules[j], FileName, 1000);
					printf("\t%s\n", FileName);
				}
			} else {
				printf("\tモジュール一覧の取得に失敗.\n");
			}

			CloseHandle(hProcess);
		}
	}
}


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

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