我使用 C# PInvoke 实现了 kernel32.dll 中的 ReadProcessMemory 函数。在 Windows 10 上编译和安装它可以完美运行。但是,在 Windows 11 中安装相同的程序,无论是否以管理员权限运行都会抛出错误 299。
这是c#代码:
[DllImport("kernel32.dll", SetLastError = setLastError)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool ReadProcessMemory(
[In] IntPtr hProcess,
[In] IntPtr lpBaseAddress,
[Out] byte[] lpBuffer,
[In] UIntPtr dwSize,
[Out] out UIntPtr lpNumberOfBytesRead
);
我使用 Process.Handle 作为 hProcess。但由于它在 Windows 10 上运行,相同的编译代码,没有重新编译,我无法想象它是错误的。最有可能的是 Windows 上的某些设置不允许一个进程读取另一进程的内存,即使我们以管理员权限运行也是如此。
执行以下两次 Windows 更新后:
2024-05 .NET 8.0.5 Security Update for x64 Client (KB5038352)
2024-05 .NET 6.0.30 Security Update for x64 Client (KB5038350)
它按预期工作。