Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.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总是返回false?_C# - Fatal编程技术网

C# 为什么ReadProcessMemory总是返回false?

C# 为什么ReadProcessMemory总是返回false?,c#,C#,不知道为什么,但是对于某些ReadProcessMemory总是返回false。始终按如下方式导入: [DefaultDllImportSearchPaths(Kernel32.Path)] [DllImport(Kernel32.Dll)] private static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, int nSize, IntPtr lpN

不知道为什么,但是对于某些ReadProcessMemory总是返回false。始终按如下方式导入:

[DefaultDllImportSearchPaths(Kernel32.Path)]
[DllImport(Kernel32.Dll)]
private static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, int nSize, IntPtr lpNumberOfBytesRead);
以下是运行ReadProcessMemory的结果(IntPtr HandleWithAllAccess、IntPtr ProcessBaseAddress、byte[]BufferSizeOf500、int TheSize500、IntPtr.Zero)


注意:为了避免人们开始问不相关的问题,Kernel32是一个具有dll名称和找到它的路径的类

读取操作进入了进程的不可访问区域,这就是它返回false的原因。感谢Jeroen Mostert链接文档,我将从现在起将
SetLastError设置为true。

DllImport(..,SetLastError=true)
。然后
抛出新的Win32Exception()
实际上会告诉您函数返回
FALSE时失败的原因。还列出了它可能失败的一些原因。1)执行
SetLastError=true
没有引发任何异常。2) 我忘记了
如果请求的读取操作进入进程中不可访问的区域,函数将失败。
,可能就是这样。
SetLastError=true
不应返回任何内容,非托管函数也不会自动生成托管异常。它指示封送拆收器捕获
SetLastError()
的结果,以便在需要检查详细信息时可以访问
Win32Exception
调用此函数并格式化结果消息。每当函数记录“要获取扩展的错误信息,请调用
GetLastError
”时设置此选项是一个好主意。从现在起我会这么做的。