Windows 调用OpenProcess失败
OpenProcess 打开|获得进程句柄
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <strong>函数原型</strong>: HANDLE OpenProcess( DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId) <strong>参数说明</strong>: 1、dwDesiredAccess:想拥有的该进程访问权限 PROCESS_ALL_ACCESS //所有能获得的权限 PROCESS_CREATE_PROCESS //需要创建一个进程 PROCESS_CREATE_THREAD //需要创建一个线程 PROCESS_DUP_HANDLE //重复使用DuplicateHandle句柄 PROCESS_QUERY_INFORMATION //获得进程信息的权限,如它的退出代码、优先级 PROCESS_QUERY_LIMITED_INFORMATION /*获得某些信息的权限,如果获得了PROCESS_QUERY_INFORMATION,也拥有PROCESS_QUERY_LIMITED_INFORMATION权限*/ PROCESS_SET_INFORMATION //设置某些信息的权限,如进程优先级 PROCESS_SET_QUOTA //设置内存限制的权限,使用SetProcessWorkingSetSize PROCESS_SUSPEND_RESUME //暂停或恢复进程的权限 PROCESS_TERMINATE //终止一个进程的权限,使用TerminateProcess PROCESS_VM_OPERATION //操作进程内存空间的权限(可用VirtualProtectEx和WriteProcessMemory) PROCESS_VM_READ //读取进程内存空间的权限,可使用ReadProcessMemory PROCESS_VM_WRITE //读取进程内存空间的权限,可使用WriteProcessMemory SYNCHRONIZE //等待进程终止 2、bInheritHandle:表示所得到的进程句柄是否可以被继承 3、dwProcessId:被打开进程的PID 返回值: 如果函数调用成功将返回一个进程句柄值,否则将返回NULL 注意:在使用完所获得的进程句柄后一定要调用CloseHandle(handle)来关闭进程的句柄。 使用的例子在前面的文章中已经写出了。在使用此函数时会发现不能成功获得有些系统进程的句柄,原因是没有权限。解决办法是在调用此函数前让我们的进程得到SeDebugPrivilege权限。 |
服务方式程序时,程序的创建者为SYSTEM用户;非SYSTEM用户调用OpenProcess访问该服务程序时,调用失败,GetLastError返回5
调用下面的函数提权,即可解决。(若有其他方案,欢迎补充)
void enableDebugPriv() { HANDLE hToken; LUID sedebugnameValue; TOKEN_PRIVILEGES tkp; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) { return; } if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue)) { CloseHandle(hToken); return; } tkp.PrivilegeCount = 1; tkp.Privileges[0].Luid = sedebugnameValue; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof tkp, NULL, NULL)) { CloseHandle(hToken); return; } }
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!


作者:风来风往风伤
出处:http://www.cnblogs.com/amwuau/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探