ヒープリストの表示(VB)

キーワード:

CreateToolhelp32Snapshot, Process32First, Heap32ListFirst, Heap32ListNext, CloseHandle, Process32Next

サンプルコード:

'主な宣言
Public Const SIZEOF_HEAPLIST32 As Long = 16

Public Type HEAPLIST32
	Size As Long
	ProcessID As Long
	HeapID As Long
	Flags As Long
End Type

' 全てのプロセスのヒープリストをテキストボックスに表示
Private Sub DispHeapList()

	Dim hProcessSnap As Long
	Dim hHeapSnap As Long
	Dim pe As PROCESSENTRY32
	Dim hl As HEAPLIST32
	Dim bProcessResult As Long
	Dim bHeapResult As Long
	Dim Msg As String

	'テキストボックスをクリア
	txtMsg.Text = ""

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

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

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

		' プロセスのヒープリストのスナップショットを作成
		hHeapSnap = CreateToolhelp32Snapshot(TH32CS_SNAPHEAPLIST, pe.ProcessID)

		'プロセスの最初のヒープリストの情報を取得
		hl.Size = SIZEOF_HEAPLIST32
		bHeapResult = Heap32ListFirst(hHeapSnap, hl)

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

		Do While bHeapResult ' 全てのヒープリストの情報を表示するループ

			' メッセージの作成
			Msg = Msg & "  ヒープID: " & Hex(hl.HeapID) & vbCrLf

			' フラグのメッセージ作成
			Msg = Msg & "  フラグ: " & vbCrLf

			If (hl.Flags And HF32_DEFAULT) > 0 Then
				Msg = Msg & "    プロセスのデフォルトヒープ" & vbCrLf
			End If

			If (hl.Flags And HF32_SHARED) > 0 Then
				Msg = Msg & "    共有ヒープ" & vbCrLf
			End If


			Msg = Msg & vbCrLf

			'次のヒープリストの情報を取得
			bHeapResult = Heap32ListNext(hHeapSnap, hl)
		Loop

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

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

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

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

End Sub

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

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