No.1ベストアンサー
- 回答日時:
1.プロセスをリストする
2.リストしたプロセスのうち、ファイル名が「A.EXE」になっている物を探す(A.EXEがリネームされている場合はどうしようもない)
3.探したプロセスのメモリの特定部分を検査し、A.EXEかどうか確認する(例えば、コードブロックメモリの先頭にあるバージョン情報や、リソース情報を読み取る)
//変数宣言
PROCESSENTRY32 *ProcessList;
DWORD ProcessListSize;
DWORD ProcessListCount;
BOOL (WINAPI *lpfEnumProcessModules)(HANDLE, HMODULE *, DWORD, LPDWORD);
DWORD (WINAPI *lpfGetModuleFileNameEx)(HANDLE, HMODULE, LPTSTR, DWORD);
HINSTANCE hInstLib;
//初期化部分
hInstLib = NULL;
if (GetVersion() < 0x80000000) {
//WinNT or WinXP
hInstLib = LoadLibrary("PSAPI.DLL");
if (hInstLib) {
lpfEnumProcessModules = (BOOL (WINAPI *)(HANDLE, HMODULE *, DWORD, LPDWORD)) GetProcAddress(hInstLib, "EnumProcessModules");
lpfGetModuleFileNameEx = (DWORD (WINAPI *)(HANDLE, HMODULE,LPTSTR, DWORD)) GetProcAddress(hInstLib,"GetModuleFileNameExA");
if (!lpfEnumProcessModules && !lpfGetModuleFileNameEx) {
lpfEnumProcessModules = NULL;
lpfGetModuleFileNameEx = NULL;
FreeLibrary(hInstLib);
hInstLib = NULL;
}
}
}
//プロセスのリスト関数
DWORD __fastcall GetProcessList(PROCESSENTRY32 *ProcList, DWORD ListSize, LPDWORD Needed)
{
DWORD Need = 0;
DWORD SetCount = 0;
HANDLE hSnapshot;
HANDLE hProcess;
PROCESSENTRY32 procent;
HMODULE hMod;
DWORD dwSize;
CHAR szFileName[MAX_PATH];
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (hSnapshot != (HANDLE)-1) {
procent.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hSnapshot,&procent)) {
do {
hProcess = OpenProcess(PROCESS_ALL_ACCESS, NULL, procent.th32ProcessID);
if (hProcess) {
if ((ListSize) && (ProcList)) {
//WinNT or WinXP
if (hInstLib) {
if (lpfEnumProcessModules(hProcess, &hMod, sizeof(hMod), &dwSize))
if (lpfGetModuleFileNameEx(hProcess, hMod, szFileName, sizeof(szFileName))) {
strncpy(procent.szExeFile,szFileName,MAX_PATH - 1);
procent.szExeFile[MAX_PATH - 1] = '\0';
}
}
*ProcList++ = procent;
ListSize--;
SetCount++;
}
Need++;
CloseHandle(hProcess);
}
} while(Process32Next(hSnapshot,&procent) != FALSE);
}
CloseHandle(hSnapshot);
}
if (Needed) *Needed = SetCount;
return Need;
}
//関数の呼び出し部分
PROCESSENTRY32 *NewProcessList;
i = GetProcessList(ProcessList, ProcessListSize, &ProcessListCount);
if (i > ProcessListSize) {
NewProcessList = (PROCESSENTRY32 *)realloc(ProcessList,(i + 16) * sizeof(PROCESSENTRY32));
if (!NewProcessList) {
ProcessList = NewProcessList;
ProcessListSize = i + 16;
}
GetProcessList(ProcessList, ProcessListSize, &ProcessListCount);
}
//i番目のプロセスにアタッチする
DWORD ProcessId;
ProcessId = ProcessList[i]->th32ProcessID;
if (ExecProcessHandle) CloseHandle(ExecProcessHandle);
ExecProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, NULL, ProcessId);
//アタッチしたプロセスのメモリを1バイト読む
unsigned char cbuf[3];
int StartAddress;
int err;
DWORD Rb;
Rb = 0;
err = ReadProcessMemory(ExecProcessHandle, (void *)StartAddress, cbuf, 1, &Rb);
if (!err) {
err = GetLastError();
if ((err != ERROR_PARTIAL_COPY) && (err != ERROR_NOACCESS)) {
//該当プロセスが終了してメモリにアクセスできない
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- 労働相談 合意済み仕様の商品納入後における仕様変更要求への対応について 5 2023/04/19 09:41
- その他(IT・Webサービス) エクセルの実行ファイルについての質問です。 1 2023/05/04 03:58
- オープンソース Pythonのコードをexe化 1 2023/07/03 08:01
- フリーソフト TJA-Player3 Develop Rewhite 2 2023/05/04 21:24
- Windows 10 exeファイルが起動しない 4 2022/06/05 16:13
- Android(アンドロイド) exeファイルを開けない 4 2023/03/11 14:33
- Chrome(クローム) Chrome拡張機能に詳しい方 1 2022/10/15 13:41
- Excel(エクセル) WPSスプレッドシートの起動オプションの設定は可能ですか? 1 2023/02/11 19:49
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
プロセスが実行中かどうか調べる方法
C言語・C++・C#
-
VC++から引数付きexeファイルの実行
C言語・C++・C#
-
別アプリの起動、終了について
C言語・C++・C#
-
-
4
UpdateData( FALSE); による文字列データの表示更新(VC++6.0)
C言語・C++・C#
-
5
iniファイルのキーと値を取得するにはどうすれば?
C言語・C++・C#
-
6
CreateProcessでアプリが終了しない
C言語・C++・C#
-
7
CString から LPCTSTRの型に変換
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
explorer.exeが異様にメモリを食う
-
プロセスのアタッチ・デタッチ...
-
Texについてです。 jpgファイル...
-
WINのタスクマネージャの強制終了
-
シェルで親プロセス終了時に子...
-
ウィンドウのタイトルからプロ...
-
Linuxでのスレッド間メッセージ...
-
C++のプログラムをバックグラウ...
-
他のアプリケーションの操作に...
-
API関数 GetExitCodeProcess
-
怪しいプロセス教えてください。
-
WebBrowserでPDF表示でのトラブル
-
Windowsでのfork方法
-
ADOでアクセスのレコードに...
-
Visual C++からpingを実行して...
-
VBでエクセルを起動し、プロ...
-
スレッド?
-
VB6.0 SHELLで起動...
-
複数同時実行時の参照先について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
explorer.exeが異様にメモリを食う
-
なぜ女性は男性が忘れたことを...
-
タスクマネージャーのプロセス...
-
プロセスのアタッチ・デタッチ...
-
非表示になったエクセルは?
-
Process.Startの戻り値を後で取得
-
C#でのbatファイル実行結果取得
-
プロセスIDからウィンドウハ...
-
c言語でプロセスIDを調べたい
-
Linuxでのスレッド間メッセージ...
-
プロセスIDの取得方法について
-
ADOでアクセスのレコードに...
-
怪しいプロセス教えてください。
-
vb.netでEXCEL起動がうまくでき...
-
別のプロセスの関数を呼び出す...
-
C++のプログラムをバックグラウ...
-
Visual C++からpingを実行して...
-
VBS(WSH)で開いたIEのウィンド...
-
IISがフリーズ
おすすめ情報