win7 进程权限问题

mtj530 2011-04-07 04:28:57
在XP下。我openprocess打开某一进程以后,能够得到有效的句柄。
而在win7下,结果系统进程和统统拿不到句柄了,而非系统进程还是可以拿到。
那些没有拿到句柄的进程出现的错误代码是5,也就是权限问题。
后面上网查了下,可以提升自己的权限,下面的代码。
BOOL EnableDebugPrivilege(BOOL fEnable)
{
BOOL fOK = FALSE;
HANDLE hToken = NULL;

if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))//获得进程访问令牌的句柄
{
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges[0].Luid); //查询进程的权限,获取一个权限对应的LUID值
tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL); //判断令牌权限,对这个访问令牌进行修改
fOK = (GetLastError()==ERROR_SUCCESS);
CloseHandle(hToken);
}

return fOK;
}

结果fok返回值为0,也就是还是没有拿到这个权限问题。
现请教各位大虾帮助下,怎么样才可以有效的得到进程句柄。
...全文
245 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bdmh 2011-04-07
  • 打赏
  • 举报
回复
要用右键管理员权限才行
CyberLogix 2011-04-07
  • 打赏
  • 举报
回复
楼上说的正确,由于ADMINISTER的权限运行代码
Lactoferrin 2011-04-07
  • 打赏
  • 举报
回复
OpenProcessToken((HANDLE)-1,TOKEN_ADJUST_PRIVILEGES,&hToken);
tp.PrivilegeCount=1;
tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
tp.Privileges[0].Luid.HighPart=0;
tp.Privileges[0].Luid.LowPart=20;
AdjustTokenPrivileges(hToken,0,&tp,0,0,0);

以管理员身份运行
c_losed 2011-04-07
  • 打赏
  • 举报
回复

void Adjust()
{
TOKEN_PRIVILEGES tkp;
LUID luid;
HANDLE hProcessToken = NULL;
OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hProcessToken);
LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&luid);
tkp.Privileges[0].Luid = luid;
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hProcessToken, FALSE, &tkp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES)NULL,(PDWORD)NULL);
}
老邓 2011-04-07
  • 打赏
  • 举报
回复
要用管理员权限运行,右键。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧