问题标签 [openprocess]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Overflow Issue with VirtualQueryEx in C# compiled for x64
I've been trying to create my own memory reader in C# based on a couple of articles I've seen on CodeProject. I got everything working as I would have liked when compiled for 32-bit Windows, but the issues began when I tried to convert over to a 64-bit build.
I was able to get VirtualQueryEx
to work in a 64-bit C++ test project, where the MEMORY_BASIC_INFORMATION
is already defined, and the BaseAddress
member is a PVOID
.
When I tried to move over to C#, I have to define MEMORY_BASIC_INFORMATION
myself as indicated in the CodeProject example above that I am using as guidance.
The below code works for applications that have small memory profiles, but for larger applications, the MI.BaseAddress
variable below seems to truncate to 2,147,356,672, and the program is stuck in an infinite loop, where currentAddress
is always equal to MI.BaseAddress + MI.RegionSize
(before casting to ulong
).
Any guidance would be greatly appreciated. Thank you!
-
-
java - Java 打开外部程序然后关闭 java 程序
好吧,我有一个关闭挂钩,可以确保我在关闭时很好地关闭连接。我现在需要做的是打开另一个程序(终端模拟器),然后关闭我的程序,同时让终端模拟器保持打开状态。我能够打开模拟器,但java程序在模拟器关闭之前不会关闭。我怎样才能运行某些东西并关闭我的程序?
windows - OpenProcess:仅在 Windows 8.1 上出现拒绝访问错误
我有一个程序可以调整 SeDebugPrivilege,然后开始遍历系统进程并为它们调用 OpenProcess(并执行其他操作,但现在并不重要)。当然,该程序也以管理员模式运行。在 Windows XP 和 Windows 7上,它工作正常,但在 Windows 8.1 上,OpenProcess 因以下系统进程而失败,并显示 ERROR_ACCESS_DENIED(5):smss.exe、csrss.exe、services.exe。正如我所知道的 SeDebugPrivilege 我应该能够打开这些进程并为它们检索一个句柄。有谁知道,什么样的魔法只在 Windows 8.1 上导致这个错误?
(无论如何我对 CreateToolhelp32Snapshot 的相同过程有相同的错误)
c - 检查(作为普通用户)管理进程是否正在运行(C,Windows)
我正在尝试检查从服务启动的进程是否正在运行。
问题是,我们将我们的应用程序从 Windows XP 迁移到 Windows 7。这个应用程序的一部分是服务,它启动了一些进程。另一部分是对话应用程序。此对话框应用程序尝试识别来自服务的进程是否正在运行。进程的 pid 存储在共享内存中,因此我可以OpenProcess()
从 WinApi 获取要处理的句柄,这适用于 Windows XP。如果我尝试在 Windows 7 上执行此操作,该功能会给我错误 - 访问被拒绝。
我想,我知道,为什么会这样(Windows7 中的新 0 级隔离),但我需要找到一些解决方法。
我的问题是是否可以对创建的进程设置访问权限以及如何设置(请给我一些解释示例)?
我发现,有一个参数,CreateProcess()
有一个函数SetSecurityInfo()
,但我使用这个函数的方式可能很糟糕,因为它不起作用。
要检查,如果进程正在运行,我使用
或者
wherehandle
取自OpenProcess()
函数 -OpenProcess( PROCESS_ALL_ACCESS , FALSE, pid );
我也尝试过SYNCHRONIZE
,PROCESS_QUERY_INFORMATION
和PROCESS_QUERY_LIMITED_INFORMATION
. 但总是拒绝访问..
每个想法都会有用。
c# - C# ReadProcessMemory 替代方案
我正在尝试ReadProcessMemory
在某个进程上,但它用于ObRegisterCallbacks
防止另一个进程在其上创建句柄(OpenProcess
)。ReadProcessMemory
我听说有人在没有or的情况下在 C# 中创建自己的内存读取工具OpenProcess
。如果有人能告诉我如何创建这样一个很棒的库(或者如果我可以链接到现有的库)。
这是严格的读取内存,我不需要将内存写入进程
c++ - 如果用户已经退出应用程序,Win32 C++ OpenProceess 应该返回 null 但没有?
我有一个程序(作为后台进程运行),我在其中安装了一个钩子来捕获 EVENT_SYSTEM_FOREGROUND 事件(即 - 当用户在窗口之间切换时)。为钩子注册的回调基本上记录了用户从哪个应用程序(进程 exe 文件名)切换以及他们切换到了哪个应用程序。
我想添加一些代码来检查他们切换的应用程序是否仍然处于活动状态(如果不是,我们假设他们已经关闭它,这就是将新窗口带入前台的原因)。我正在通过尝试使用OpenProcess创建上一个 PID 的句柄来测试它的存在
上面代码的假设:
g_prevPid 填充了一个 PID - 我已经验证了这个
prevProcStillRunning 已经初始化为 true
上面代码的问题在于,出于某种原因,即使用户退出了应用程序(例如 notepad.exe)。在它们退出后长达 10 秒内,此测试仍然通过(即 - hPrevProc 被初始化)。尽管我可以在任务管理器中看到 Notepad.exe 进程已经消失(是的,我只打开了它的一个实例),但不知何故,OpenProcess 行仍然可以获取该 PID 的句柄。我猜想PID实际上仍然存在,但它可能处于终止状态。我发现如果这段代码被多次调用,最终它会返回 null。
我想找到一种更好的方法来测试 hPrevProc 是否仍然处于活动状态。我尝试使用GetExitCodeProcess函数对此进行测试,但这似乎只是给了我 PID,我什至不确定这是否是正确的方法。
任何帮助表示赞赏。
c++ - OpenProcess 失败(SeDebugPrivilege?)
我正在尝试使用 OpenProcess,由于某种原因它一直失败。
即使我在调用 OpenProcess 时手动设置了 pid,这也总是返回 0xcccccccccccccccc 或 0x0000000000000020。
我尝试在 Visual Studio 内调试之外以管理员身份运行并获得相同的结果,搜索后,我认为我需要启用调试权限(SeDebugPrivilege),我该如何在 Visual Studio 2013 中执行此操作?
c# - OpenProcess 返回错误代码 6(ERROR_INVALID_HANDLE)
我尝试使用该OpenProcess
函数获取正在运行的进程的句柄。但是,当检查错误代码时,我得到一个错误代码 6 (ERROR_INVALID_HANDLE)。
这是一个简化的示例:
我不确定为什么它不起作用。它只返回错误代码 6。有什么建议吗?
我不知何故感觉这是因为我正在访问的程序,但其他一切都运行良好并且没有返回任何其他错误。
c++ - 从 exe c++ 获取基地址
我尝试使用 openprocess 从这个 exe 中获取基本起始地址,但是当我运行代码时我一直在崩溃,我并没有真正看到它有什么问题。
c++ - 使用代码注入在远程进程中执行功能
我正在使用高级代码注入代码在远程进程上启动 .dll。例如,您可以从这里找到它的工作原理/代码片段:
https://sourceforge.net/p/diagnostic/svn/HEAD/tree/src/RemoteInit.cpp
我注意到对于某些应用程序,这种方法不起作用 - 它会使主机应用程序崩溃。主要问题似乎是特殊的第 3 方软件,例如通过提供自己的钩子函数ConEmuHk64.dll
进行拦截kernel32.dll GetProcAddress
- 之后我得到这样的函数指针:
但相反,我得到了指向位于 ConEmuHk64.dll 中的函数的指针。
在我自己的进程中调用该函数是可以接受的,但是当尝试在远程进程中执行相同操作时 - 它会崩溃,因为ConEmuHk64.dll
那里不一定可用。
我已经弄清楚了如何通过手动进入 DOS/NE 其他标头来自动探测该函数的正确地址的机制 - 这是代码片段:
这似乎有效GetProcAddress
- 我可以检测到钩子函数并覆盖它的行为。但是 - 这种方法不是通用的。我已经为其他方法尝试过类似的函数调用,例如FreeLibrary/AddDllDirectory/RemoveDllDirectory
- 并且那些函数指针精确定位到 dll 边界之外 -GetProcAddress
在 DOS 标头之前返回地址。
我怀疑按 dll / 代码大小范围进行的比较不正确:
但是不知道如何改进公式。
你能推荐我如何完全修复这个问题 - 所以任何 3-rd 方软件都可以拦截任何功能,并且我可以从中幸存而不会崩溃?