摘要:本文主要向大家介绍了VC编程之VC、MFC 访问进程内存,代码片段,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。
本文主要向大家介绍了VC编程之VC、MFC 访问进程内存,代码片段,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。
#include "StdAfx.h"#include
//打开进程内存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;
else
tp.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);
}
}
//根据进程名,返回第一个进程实例的PID
INT 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);
//循环比较,得出ProcessID
while(bRet)
{
if(0 == szExeName.Compare(procEntry.szExeFile))
return procEntry.th32ProcessID;
bRet=Process32Next(hProcess,&procEntry);
}
return 0;
}
以上就介绍了VC/MFC的学习,希望对VC/MFC有兴趣的朋友有所帮助。了解更多内容,请关注职坐标编程语言VC/MFC频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号