プログラミングのメモ帳(C/C++/HSP)

日々のプログラミングで気づいた点や小技集を紹介します。(Windows 10/XP/Vista、VC2017、HSP)

モジュールの列挙

2007年10月05日 08時34分23秒 | パフォーマンス関連

Windows NT 4.0 以降でモジュールを列挙するにはEnumProcessModules()関数を使います。(戻る)

プロトタイプ宣言

BOOL EnumProcessModules(
  HANDLE hProcess,     // プロセスのハンドル
  HMODULE *lphModule,  // モジュールハンドルの配列
  DWORD cb,            // モジュールハンドルの配列サイズ
  LPDWORD lpcbNeeded   // 返されたバイト数
);

DWORD GetModuleBaseName(
  HANDLE hProcess,    // プロセスのハンドル
  HMODULE hModule,    // モジュールのハンドル
  LPTSTR lpBaseName,  // バッファ領域
  DWORD nSize         // バッファ領域のサイズ
);

DWORD GetModuleFileName(
  HMODULE hModule,    // モジュールのハンドル
  LPTSTR lpFilename,  // バッファ領域
  DWORD nSize         // バッファ領域のサイズ
);

サンプル

#include <stdio.h>
#include <windows.h>
#include <psapi.h>  // Psapi.Lib

// メイン関数
int main( void )
{
    TCHAR   szFileName[ 1024 ];
    TCHAR   szBaseName[ 1024 ];
    HMODULE ModuleBuff[ 1024 ];
    HANDLE hProcess;
    DWORD dwSize;
    DWORD dwMax;
    DWORD dwNow;
    
    // プロセスのモジュールハンドルを取得
    hProcess = GetCurrentProcess();
    EnumProcessModules( hProcess, ModuleBuff, sizeof(ModuleBuff), &dwSize );
    // 取得した数を求める
    dwMax = (dwSize / sizeof(HMODULE));
    // プロセスのモジュールハンドルを表示
    for ( dwNow = 0 ; dwNow < dwMax ; dwNow++ ){
        GetModuleBaseName( hProcess, ModuleBuff[dwNow], szBaseName, sizeof(szBaseName) );
        GetModuleFileName(           ModuleBuff[dwNow], szFileName, sizeof(szFileName) );
        printf( "%3d: %-30s %s\n", (dwNow + 1), szBaseName, szFileName );
    }
    return 0;
}
  • ヘッダファイルとしてpsapi.hをインクルードして下さい。
  • インポートライブラリとしてPsapi.Libをリンクして下さい。

関連記事



コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 全プロセスの列挙 | トップ | 全モジュールの列挙 »
最新の画像もっと見る

コメントを投稿

パフォーマンス関連」カテゴリの最新記事