- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我使用 Windows Hook 向我的应用程序发送消息,系统上的每个应用程序都会通知该应用程序有关 Windows 事件。
为了执行消息参数的编码,我使用了共享内存。外部进程调用 DuplicateHandle , 但为了与我的应用程序实例共享句柄,它应调用 OpenProcess具有 PROCESS_DUP_HANDLE 权限要求。
实际上每个应用程序都可以使用此架构发送消息,即使我需要为外部进程启用 SeDebugPrivilege。它确实有效,除了“explorer”进程,它没有 SeDebugPrivilege token ...
AdjustTokenPrivileges 的文档状态:
The AdjustTokenPrivileges function cannot add new privileges to the access token. It can only enable or disable the token's existing privileges. To determine the token's privileges, call the GetTokenInformation function.
所以,问题是……如何将 SeDebugPrivilege token 添加到“explorer”进程,或者如何允许“explorer”进程调用 OpenProcess(PROCESS_DUP_HANDLE, FALSE, pId)
?
最佳答案
我不明白你为什么不使用命名共享内存。如果您的共享内存对象有名称,则无需使用 DuplicateHandle
即可打开该对象。
如果你确实必须使用 DuplicateHandle
并且需要能够在任何进程中使用 OpenProcess(PROCESS_DUP_HANDLE, FALSE, pId)
我发现你不应该使用 SeDebugPrivilege
。相反,您应该授予PROCESS_DUP_HANDLE
权限给每个人,以使用pId
进程。如果您创建一个进程,您可以指定安全描述符。如果进程已经创建,您可以使用 OpenProcess
、GetSecurityInfo
(参见 http://msdn.microsoft.com/en-us/library/aa446654.aspx)和 SetSecurityInfo
修改进程的安全描述符。
要测试此方法,您只需启动具有管理权限的 Process Explorer(请参阅 http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx),打开所选进程(具有 pId
的进程)的安全选项卡并修改其安全描述符。之后,所有进程都可以使用 OpenProcess(PROCESS_DUP_HANDLE, FALSE, pId)
而无需启用 SeDebugPrivilege
。
关于c++ - DuplicateHandle : need to OpenProcess, 但访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3400675/
是否有 OpenProcess 函数的内核模式版本? 基本上我想从进程 ID 获取进程句柄。具体来说,我想获取系统进程ID的句柄。 谢谢! 最佳答案 如果您位于任意系统线程中,则可以使用 ZwCurr
我正在开发一个应用程序,它可以创建多个桌面并让用户能够在他当前使用的桌面下启动他想要的任何应用程序。 当该桌面关闭时(使用组合键)我想关闭在该桌面下打开的所有应用程序。为此,我使用 EnumProce
我对 win32 api 的 OpenProcess 函数有这个问题。程序旨在通过用户输入从给定程序 PID 和整数地址的程序中读取整数。 int main() { DWORD pidz; int
为了保护我的程序,我想进行检查以检测任何使用我的 PID 执行 OpenProcess 的程序?我想防止其他程序可以轻松获取我的程序的句柄。 我有哪些选择? (WinAPI 等)一旦另一个程序使用 O
在我的 manager.exe 中,我试图更改由我的 service.exe 启动的 worker.exe 的 CPU 使用率。 Service.exe 在系统帐户下运行,而 manager.exe
我有一个应用程序打开另一个非系统 32 位进程,并尝试使用 EnumProcessModulesEx 获取其加载模块的列表,并使用 GetModuleFileNameEx 获取每个模块的路径.它在我的
我正在尝试编写一个程序,该程序从当前目录中的 MinGW 发行版执行 make.exe,并使用其 STDOUT 数据和退出代码。我有一个处理 STDOUT 的句柄,我从中获取数据,使用 CreateP
当我运行我的程序时发生了一些奇怪的事情。当我在 VS 2010 中使用“不调试启动”选项运行它时,OpenProcess 照常返回进程句柄,但是当我在 Windows 资源管理器中运行我的程序时,Op
我正在尝试使用 Visual Studio 2012、c++ 控制台应用程序打开进程并收到 87 错误: #include #include #include #define EXTERN_DL
我制作了这个简单的类来打开一个进程并从中读取内存:问题是当我使用任何内存地址 ReadProcessMemory 调用 ReadDWORD 时失败,错误代码为 6:ERROR_INVALID_HAND
此程序枚举所有句柄并获取它们的名称。 对于 pID 4,OpenProcess 使用 SeDebugPrivilege 获得错误 5。 UAC 关闭。从管理员运行。 启用 SeDebugPrivile
在 Windows 中,我可以通过 CreateProcess() 获取 PROCESS_INFORMATION。但是,是否可以通过 OpenProcess() 获取 PROCESS_INFORMAT
我使用 Windows Hook 向我的应用程序发送消息,系统上的每个应用程序都会通知该应用程序有关 Windows 事件。 为了执行消息参数的编码,我使用了共享内存。外部进程调用 Duplicate
我在实现读取外部进程内存的算法时遇到了一些问题。这是主要代码: System.Diagnostics.Process.EnterDebugMode();
我一直在阅读 Hoglund 的一些书,我想我会在他的“简单调试器”上“开始”... 反正我一直在尝试用线 hProcess = OpenProcess(PROCESS_ALL_ACCESS | PR
根据微软文档,dwDesiredAccess 参数可以是一个或多个进程访问权限。 我想在调用 openProcess 函数时传递两个不同的 dwDesiredAccess(PROCESS_QUERY_
我在 Windows 平台上运行以下代码。目的是了解特定进程 ID 是否引用现有进程。 BOOL bProcessExists = FALSE; HANDLE hProcHandle = ::Open
我正在尝试从 Kernel32.dll Hook OpenProcess 以防止所谓的“injector”程序注入(inject)其他 dll进入我的过程: // ------------------
我正在努力枚举所有用户的 iexplore.exe 实例。我能够获得机器上匹配进程的列表,但要识别用户,我需要使用 OpenProcess。这适用于我自己的实例,但即使以管理员身份运行和 Enable
这些 Windows 函数的等效 API 是什么?如果您不熟悉 Windows 函数,它们所做的只是打开一个进程,访问(读取和写入)它的内存并关闭它的句柄。 这也可以只用系统调用来完成吗? 最佳答案
我是一名优秀的程序员,十分优秀!