掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ReadProcessMemoryが失敗します (ID:73327)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
任意のプロセスのメモリー内容を全て取得したいと思っています。 下記コードをVS2008(WindowsXP),VS2010(Vista)にて実行してメモ帳のメモリーを取得しようとしましたが、 ReadProcessMemory()が失敗します。 読み込むサイズを1024などに変更しても同様でした。 どのようにすれば実現できますでしょうか? よろしくお願いいたします。 //////////////////////////////////////////////////////////////////////////// // ReadProcessMemoryTest.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 // #include "stdafx.h" #include <iostream> using namespace std; #include <windows.h> #include "Psapi.h" #pragma comment(lib,"psapi.lib") int _tmain(int argc, _TCHAR* argv[]) { HWND hWnd; DWORD dwID; HANDLE hProcess; hWnd = FindWindow(TEXT("Notepad"),NULL); GetWindowThreadProcessId(hWnd, &dwID); hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, dwID); if (!hProcess) { printf("Couldn't open process.\n"); system("PAUSE"); return 0; } PROCESS_MEMORY_COUNTERS memInfo; memInfo.WorkingSetSize=0; memInfo.PagefileUsage=0; if(!GetProcessMemoryInfo(hProcess, &memInfo, sizeof(memInfo))) { printf("Couldn't get memory info.\n"); CloseHandle(hProcess); return 0; } printf("memory size is %d\n",memInfo.WorkingSetSize); int value = 9999999, newvalue = -1; DWORD address = (0x0000000); //pointer address // DWORD newpvalue = NULL; printf("Pointer address is intially %x\n", address); char *buf = new char[memInfo.WorkingSetSize]; memset(buf, 0, memInfo.WorkingSetSize); if(!ReadProcessMemory(hProcess,(LPCVOID) address, &buf, memInfo.WorkingSetSize ,NULL)) { DWORD errorCode = GetLastError(); printf("Couldn't get memory. Erro code is %d\n",errorCode); delete buf; system("PAUSE"); return 0; } printf("Pointer value is\n"); for (int i=0 ;i<memInfo.WorkingSetSize;++i) { printf( " %02X", buf[i] ); } printf( "\n" ); delete buf; system("PAUSE"); return 0; }
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.