Module32First 最初のモジュールの情報を取得

Cの宣言:

BOOL Module32First(HANDLE hSnapshot, LPMODULEENTRY32 ModuleEntry)

VBの宣言:

Declare Function Module32First Lib "kernel32" (
	ByVal hSnapshot As Long, 
	ByRef ModuleEntry As MODULEENTRY32) As Long

説明:

hSnapshotで示されるスナップショットに含まれるモジュール一覧の情報の最初のモジュール情報を取得する。

この関数は95またはNT5.0以降で使用可能である。

この関数を実行する前に、あらかじめModuleEntryのSizeメンバにMODULEENTRY32のサイズを格納しておかなければならない。

引数の意味は、以下の通り。
hSnapshot (in) 情報取得元のスナップショットを示すハンドル
ModuleEntry (out) 取得結果のモジュールの情報

戻り値は、関数の実行に成功したか否かを表す真偽値である。

サンプルコード(VB):

'主な宣言
Public Const SIZEOF_MODULEENTRY32 As Long = 548

Public Type MODULEENTRY32
	Size As Long
	ModuleID As Long
	ProcessID As Long
	GlobalRefCount As Long
	LocalRefCount As Long
	BaseAddress As Long
	ModuleSize As Long
	hModule As Long
	ModuleName As String * 256
	ModulePath As String * 260
End Type

' モジュールの情報をテキストボックスに表示
Private Sub DispModuleList()

	Dim hProcessSnap As Long
	Dim hModuleSnap As Long
	Dim pe As PROCESSENTRY32
	Dim me32 As MODULEENTRY32
	Dim bProcessResult As Long
	Dim bModuleResult As Long
	Dim Msg As String

	' プロセス一覧のスナップショットを作成
	hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)

	' プロセスの最初の情報を取得
	pe.Size = SIZEOF_PROCESSENTRY32
	bProcessResult = Process32First(hProcessSnap, pe)

	Do While bProcessResult ' 全てのプロセスの情報を取得するループ

		' プロセスのモジュールリストのスナップショットを作成
		hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pe.ProcessID)

		'プロセスの最初のモジュールの情報を取得
		me32.Size = SIZEOF_MODULEENTRY32
		bModuleResult = Module32First(hModuleSnap, me32)

		Msg = Msg & "プロセスのファイル名: " & Left(pe.FileName, InStr(pe.FileName, vbNullChar) - 1) & vbCrLf

		Do While bModuleResult ' 全てのモジュールの情報を表示するループ

			' メッセージの作成
			Msg = Msg & "  モジュールID: " & Hex(me32.ModuleID) & vbCrLf
			Msg = Msg & "  プロセスID: " & Hex(me32.ProcessID) & vbCrLf
			Msg = Msg & "  グローバルでの参照カウント: " & me32.GlobalRefCount & vbCrLf
			Msg = Msg & "  このプロセスでの参照カウント: " & me32.LocalRefCount & vbCrLf
			Msg = Msg & "  ベースアドレス: " & Hex(me32.BaseAddress) & vbCrLf
			Msg = Msg & "  モジュールのサイズ: " & me32.ModuleSize & vbCrLf
			Msg = Msg & "  モジュールハンドル: " & Hex(me32.hModule) & vbCrLf
			Msg = Msg & "  モジュール名: " & Left(me32.ModuleName, InStr(me32.ModuleName, vbNullChar) - 1) & vbCrLf
			Msg = Msg & "  モジュールのパス: " & Left(me32.ModulePath, InStr(me32.ModulePath, vbNullChar) - 1) & vbCrLf

			Msg = Msg & vbCrLf

			'次のモジュールの情報を取得
			bModuleResult = Module32Next(hModuleSnap, me32)
		Loop

		Msg = Msg & vbCrLf

		'ヒープリストのスナップショットの破棄
		CloseHandle hModuleSnap

		' 次のプロセスの情報を取得
		bProcessResult = Process32Next(hProcessSnap, pe)
	Loop

	'メッセージの表示
	txtMsg.Text = Msg & vbCrLf

	' プロセスのスナップショットの破棄
	CloseHandle hProcessSnap

End Sub

(original text:1998/12/25 更新)

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