Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#ReadProcessMemory错误299_C#_.net_Memory_Readprocessmemory - Fatal编程技术网

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位处理的注释。你可以检查它是否适用于你的场景。如果你澄清了这样做的目的,我可以更好地回答这个问题。你在扫描图案吗?把所有的记忆都用来分析?