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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】NEW演歌
【大喜利】 若い人に向けたことは分かるけど、それはちょっと寄せ過ぎて変になってないか?と思った演歌の歌詞
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
ホテルを選ぶとき、これだけは譲れない条件TOP3は?
ホテルを探す時、予約サイトで希望条件の絞り込みができる便利な世の中。 あなたは宿泊先を決めるとき「これだけは譲れない」と思う条件TOP3を教えてください。
-
あなたは何にトキメキますか?
「きゅんとした〜♪」 と思う瞬間ってありますよね。 それは恋愛だったり、推し活だったり、映画のワンシーンだったり……。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
プロセスが実行中かどうか調べる方法
C言語・C++・C#
-
charからLPTSTRへの変換方法
C言語・C++・C#
-
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
-
4
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
5
VC++から引数付きexeファイルの実行
C言語・C++・C#
-
6
スレッドの安全な終了のさせ方
C言語・C++・C#
-
7
CString から LPCTSTRの型に変換
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
プロセスのアタッチ・デタッチ...
-
iPodの取り外しの際のエラーメ...
-
ウインドウのプロセス終了について
-
タスクマネージャーのプロセス...
-
シェルで親プロセス終了時に子...
-
怪しいプロセス教えてください。
-
プロセスIDからウィンドウハ...
-
プロセス終了の検知について
-
exeファイルを終了させない。
-
C#でのbatファイル実行結果取得
-
プロセスが実行中かどうか調べ...
-
windowsのプロセスIDやスレッド...
-
Windowsで環境変数を設定できま...
-
explorer.exeが異様にメモリを食う
-
SendMessageが失敗するときがある
-
Process.Startの戻り値を後で取得
-
ActiveX EXEのオブジェクトに渡...
-
プロセスIDの取得方法について
-
C++でシェルを起動
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
C#でのbatファイル実行結果取得
-
explorer.exeが異様にメモリを食う
-
プロセスのアタッチ・デタッチ...
-
タスクマネージャーのプロセス...
-
怪しいプロセス教えてください。
-
非表示になったエクセルは?
-
Process.Startの戻り値を後で取得
-
ADOでアクセスのレコードに...
-
Windowsでのfork方法
-
他のコンピュータのプロセスを取得
-
プロセスIDからウィンドウハ...
-
SendMessageが失敗するときがある
-
プロセスが実行中かどうか調べ...
-
IISがフリーズ
-
ロードアベレージが高いのです...
-
プロセスIDの取得方法について
-
OSPFでプロセスを分ける意義に...
-
API関数 GetExitCodeProcess
-
別のプロセスの関数を呼び出す...
おすすめ情報