C#ReadProcessMemory错误299
我试图读取进程的所有内存。我一直在用这个C#ReadProcessMemory错误299,c#,.net,memory,readprocessmemory,C#,.net,Memory,Readprocessmemory,我试图读取进程的所有内存。我一直在用这个 ProcessModule pm = process.MainModule; temp = new byte[pm.ModuleMemorySize]; byte[] d = new byte[temp.Length]; int read; int size = temp.Length; MessageBox.Show("Size: " + size);
ProcessModule pm = process.MainModule;
temp = new byte[pm.ModuleMemorySize];
byte[] d = new byte[temp.Length];
int read;
int size = temp.Length;
MessageBox.Show("Size: " + size);
if (ReadProcessMemory(process.Handle, pm.BaseAddress, temp, size, out read)) {
//d = temp;
fileData = encoder.GetString(temp);
} else MessageBox.Show("Error: " + Marshal.GetLastWin32Error());
有时,这可以完全正常工作,但对于其他应用程序,它根本不工作,并返回“Error 299”
我以x64和管理员的身份运行我的应用程序。我试图阅读哪种类型的过程似乎没有什么区别。即使是大的(26MBs)也读得很好。然后我试着读我的另一个C#程序,但它不起作用
编辑:这是否可能仅在尝试读取C#.exe进程时发生?为什么会这样?如果目标是x64,请显式编译x64。如果目标是x86,则显式编译x86。您可以在项目属性中找到设置 您必须这样做,因为许多Windows API结构对于每个体系结构都是不同的,这是因为如果结构包含指针,那么x86上的指针是4字节,x64上的指针是8字节 对所有地址/偏移量使用IntPtr,这将使它对构建它的目标使用正确的指针大小。这样,您在尝试将8字节值放入4字节变量时不会遇到任何问题
如果您采用这种技术,您将不会遇到这些问题。对于类似的问题(),Hans Passant添加了一个关于32位与64位处理的注释。你可以检查它是否适用于你的场景。如果你澄清了这样做的目的,我可以更好地回答这个问题。你在扫描图案吗?把所有的记忆都用来分析?