VC/MFC 访问进程内存,代码片段

来源:互联网 发布:js 手写板 编辑:程序博客网 时间:2024/05/18 05:51
#include "StdAfx.h"#include <TlHelp32.h>#include "ProcessMemory.h"//打开进程内存BOOL CProcessMemory::Open(INT nPID){HANDLE hToken;INT    nFlag;nFlag = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken);if(!nFlag){OutputDebugString(_T("OpenProcessToken Fail!\n"));return 0;}SetPrivilege(hToken, SE_DEBUG_NAME, TRUE);::CloseHandle(hToken);m_hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, nPID);if (m_hProc == INVALID_HANDLE_VALUE)return FALSE;return TRUE;}BOOL CProcessMemory::Open(LPCTSTR pzProcessName){INT nPID;nPID = GetProcessID(pzProcessName);return Open(nPID);}//设置进程权限int CProcessMemory::SetPrivilege(HANDLE hToken, LPCTSTR lpszStr, BOOL bEnable){TOKEN_PRIVILEGES tp;LUID luid;BOOL bRet;bRet = LookupPrivilegeValue(NULL, lpszStr, &luid);if(bRet == FALSE){OutputDebugString(_T("Lookup Privilege Value Fail!\n"));return FALSE;}tp.PrivilegeCount = 1;tp.Privileges[0].Luid = luid;if(bEnable)tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;elsetp.Privileges[0].Attributes = 0;bRet = AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL);return bRet;}//写入DWORD CProcessMemory::Write(LPVOID lpBaseAddress,  LPVOID lpBuffer, DWORD nSize){BOOL  bRet;DWORD dwReaded = 0;//句柄无效if(m_hProc == NULL)return FALSE;bRet = ::WriteProcessMemory(m_hProc, lpBaseAddress, lpBuffer, nSize, &dwReaded);if (bRet == FALSE)dwReaded = 0;return dwReaded;}//读取DWORD CProcessMemory::Read(LPCVOID  lpBaseAddress,  LPVOID lpBuffer, DWORD nSize){BOOL  bRet;DWORD dwReaded = 0;//句柄无效if(m_hProc == NULL)return FALSE;bRet = ::ReadProcessMemory(m_hProc, lpBaseAddress, lpBuffer, nSize, &dwReaded);if (bRet == FALSE)dwReaded = 0;return dwReaded;}//关闭void CProcessMemory::Close(){if (m_hProc){::CloseHandle(m_hProc);}}//根据进程名,返回第一个进程实例的PIDINT CProcessMemory::GetProcessID(LPCTSTR pzProcessName){BOOL bRet;CString szExeName(pzProcessName);HANDLE hProcess;PROCESSENTRY32 procEntry;procEntry.dwSize = sizeof(PROCESSENTRY32); //进行进程快照hProcess=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//开始进程查找bRet=Process32First(hProcess,&procEntry);//循环比较,得出ProcessIDwhile(bRet){if(0 == szExeName.Compare(procEntry.szExeFile))return procEntry.th32ProcessID;bRet=Process32Next(hProcess,&procEntry);}return 0;}


VC/MFC 访问进程内存,代码片段

 

0 0
原创粉丝点击