windows编程点滴(三)之Windows一个进程读取另一个进程的内存

读写另一个进程内存的函数:

BOOL ReadProcessMemory(

HANDLE hProcess, // 待读进程的句柄

LPCVOID lpBaseAddress, // 目标进程中待读内存的起始地址

LPVOID lpBuffer, // 用来接受读取数据的缓冲区

DWORD nSize, // 要读取的字节数

LPDWORD lpNumberOfBytesRead // 用来供函数返回实际读取的字节数

);

WriteProcessMemory( hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead); // 参数含义同上

不同操作系统方法不一样,获取操作系统版本的函数:

BOOL GetVersionEx(LPOSVERSIONINFO lpVersionInfo);

系统会将操作系统的版本信息返回到参数lpVersionInfo 指向的OSVERSIONINFO结构中。

typedef struct _OSVERSIONINFO {

DWORD dwOSVersionInfoSize; // 本结构的大小,必须在调用之前设置

DWORD dwMajorVersion; // 操作系统的主版本号

DWORD dwMinorVersion; // 操作系统的次版本号

DWORD dwBuildNumber; // 操作系统的编译版本号

DWORD dwPlatformId; // 操作系统平台。可以是VER_PLATFORM_WIN32_NT2000 系列)等

TCHAR szCSDVersion[128]; // 指定安装在系统上的最新服务包,例如“Service Pack 3”等

} OSVERSIONINFO;

在查找时目标进程内存中很可能存在多个你要搜索的值,所以在进行第一次搜索的时候,要把搜索

到的地址记录下来,然后让用户改变要搜索的值,再在记录的地址中搜索,直到搜索到的地址

惟一为止。为此写两个辅助函数和个全局变量。

BOOL FindFirst(DWORD dwValue); // 在目标进程空间进行第一次查找

BOOL FindNext(DWORD dwValue); // 在目标进程地址空间进行第234⋯⋯次查找

DWORD g_arList[1024]; // 地址列表

int g_nListCnt; // 有效地址的个数

HANDLE g_hProcess; // 目标进程句柄

你可能感兴趣的:(windows)