ReadProcessMemory

指定されたプロセスのメモリ領域からデータを読み取ります。読み取られる領域全体がアクセス可能でなければなりません。さもないと、関数は失敗します。

BOOL ReadProcessMemory(
  HANDLE hProcess,             // プロセスのハンドル
  LPCVOID lpBaseAddress,       // 読み取り開始アドレス
  LPVOID lpBuffer,             // データを格納するバッファ
  DWORD nSize,                 // 読み取りたいバイト数
  LPDWORD lpNumberOfBytesRead  // 読み取ったバイト数
);

パラメータ

hProcess
[入力]読み取りたいメモリをもつプロセスのハンドルを指定します。このハンドルは、プロセスに対する PROCESS_VM_READ アクセス権を備えていなければなりません。
lpBaseAddress
[入力]指定されたプロセスで、読み取りを開始したいベースアドレスへのポインタを指定します。どのようなデータ転送を開始する前でも、システムはベースアドレスと指定のメモリサイズによって決定されるすべてのデータに対して、読み取りアクセスを行えるかどうかを確認します。読み取りアクセスを行える場合、関数は続行します。そうでなければ関数は失敗します。
lpBuffer
[出力]指定したプロセスのアドレス空間から読み取った内容を受け取るバッファへのポインタを指定します。
nSize
[入力]指定したプロセスから読み取りたいバイト数を指定します。
lpNumberOfBytesRead
[出力]指定されたバッファへ実際に転送されたバイト数を受け取る変数へのポインタを指定します。このパラメータはオプションです。lpNumberOfBytesRead パラメータが NULL のときは、このパラメータは無視されます。

戻り値

関数が成功すると、0 以外の値が返ります。

関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、GetLastError 関数を使います。

要求された読み取り処理の途中で、プロセスのアクセス不能領域が見つかると、関数は失敗します。

解説

ReadProcessMemory 関数は、指定されたプロセスのアドレス空間から指定された範囲のデータを、現在のプロセスの指定されたバッファへコピーします。PROCESS_VM_READ アクセス権付きのハンドルを備えている任意のプロセスは、この関数を呼び出せます。通常は、デバッグ中のプロセスを読み取り対象にしますが、必ずしもこの状況に限定されるわけではありません。

読み取りたい領域全体がアクセス可能でなければなりません。さもないと、関数は前述のように失敗します。

対応情報

Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダーファイル:Winbase.h 内で宣言、Windows.h をインクルード
インポートライブラリ:Kernel32.lib を使用

参照

WriteProcessMemory

表示: