首页
社区
课程
招聘
关于ReadProcessMemory出错的问题
发表于: 2010-12-31 11:09 6474

关于ReadProcessMemory出错的问题

2010-12-31 11:09
6474
使用ReadProcessMemory总是报错 不提升权限的情况下 getlasterror是5 为拒绝访问 提升权限后发现getlasterror为0 但是程序报错 请达人指点 代码如下:

//get "Direct3DCreate9" address
	DIRECT3DCREATE9 pDirect3DCreate9 = (DIRECT3DCREATE9)::GetProcAddress(::LoadLibrary("d3d9.dll"), "Direct3DCreate9");

	HANDLE hCurrentProcess = GetCurrentProcess();
	EnableDebugPri();

	unsigned char code[5];
	::ReadProcessMemory(hCurrentProcess, (const void*)pDirect3DCreate9, code, 5, 0);
	if(code[0] != OPCODE_LONG_JMP)
	{
		DWORD dwErr = GetLastError();
		char chTemp[MAX_PATH];
		sprintf_s(chTemp,"操 出错了ReadProcessMemory code[0] !=           OPCODE_LONG_JMP ErrCode = %d",dwErr);
		MessageBox(NULL,chTemp,"唉 错了",MB_OK);
		return;
	}

BOOL EnableDebugPri()
{
	HANDLE hToken;
	BOOL fOK = FALSE;
	if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))
	{
		TOKEN_PRIVILEGES tp;
		tp.PrivilegeCount = 1;
		if(!LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges[0].Luid))
		{
			MessageBox(NULL,"Can't lookup privilege value","Error",MB_OK);
		}

		tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
		if(!AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL))
		{
			MessageBox(NULL,"Can't adjust privilege value","Error",MB_OK);
		}
		fOK = (GetLastError() == ERROR_SUCCESS);
		CloseHandle(hToken);
	}
	return fOK;
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
2
你读出的是什么?OPCODE_LONG_JMP是什么,E9?
2010-12-31 12:33
0
雪    币: 306
活跃值: (85)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
3
BOOL ReadProcessMemory(
HANDLE hProcess,
LPCVOID lpBaseAddress,
LPVOID lpBuffer,
DWORD nSize,
LPDWORD lpNumberOfBytesRead );

最后那个 lpNumberOfBytesRead 返回参数。。。要加上。。
2010-12-31 12:58
0
雪    币: 168
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
lpNumberOfBytesRead [out]
A pointer to a variable that receives the number of bytes transferred into the specified buffer. If lpNumberOfBytesRead is NULL, the parameter is ignored.

lpNumberOfBytesRead这个不是应该传0么?这个用法不对么?

OPCODE_LONG_JMP 就是E9
2010-12-31 14:57
0
雪    币: 168
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
尝试使用VirtualProtect来重新设置内存属性 但是依旧不成功,往各位牛人 给予赐教
2010-12-31 14:59
0
雪    币: 168
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
第一个问题已经找到 d3d9.dll的版本不同 他的Direct3DCreate9的入口代码是不同的 这个问题已改正 谢谢各位
2010-12-31 17:29
0
游客
登录 | 注册 方可回帖
返回
//