首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

为什么win7下调用ReadProcessMemory()总是返回失败呢?该如何解决

2012-04-22 
为什么win7下调用ReadProcessMemory()总是返回失败呢?代码如下:HANDLE hProc OpenProcess(PROCESS_VM_RE

为什么win7下调用ReadProcessMemory()总是返回失败呢?
代码如下:
HANDLE hProc = OpenProcess(PROCESS_VM_READ,FALSE,dwPID);
if(hProc)

 DWORD dwRet = -1;
DWORD dwAddr = *(DWORD*)((DWORD)GetCommandLine + 1);
TCHAR tcBuf[buffLen];
DWORD dwRead = 0; 

ReadProcessMemory(hProc,(LPVOID)dwAddr,&dwAddr,4,&dwRead);
}

在xp、server2003上都没问题。
 

[解决办法]
权限,提权
[解决办法]
win7的UAC权限问题,提Debug权限应该都有了吧?
把UAC禁用再试试这段代码
[解决办法]
procedure SetPrivilege;
var
OldTokenPrivileges, TokenPrivileges: TTokenPrivileges;
ReturnLength: dword;
hToken: THandle;
Luid: int64;
begin
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken);
LookupPrivilegeValue(nil, 'SeDebugPrivilege', Luid);
TokenPrivileges.Privileges[0].luid := Luid;
TokenPrivileges.PrivilegeCount := 1;
TokenPrivileges.Privileges[0].Attributes := 0;
AdjustTokenPrivileges(hToken, False, TokenPrivileges, SizeOf(TTokenPrivileges), OldTokenPrivileges, ReturnLength);
OldTokenPrivileges.Privileges[0].luid := Luid;
OldTokenPrivileges.PrivilegeCount := 1;
OldTokenPrivileges.Privileges[0].Attributes := TokenPrivileges.Privileges[0].Attributes or SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, False, OldTokenPrivileges, ReturnLength, PTokenPrivileges(nil)^, ReturnLength);
end;

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/flashrhx2007/archive/2008/11/18/3326416.aspx
[解决办法]
其他进程行不行,是不是地址有问题,用VirtualQueryEx查看内存状态
[解决办法]
一般应用程序有些也属于高权限程序,如果有system以上的权限,直接读似乎是不行的

热点排行