求教:进程权限设置后OpenProcess()返回值还是为NULL?

六月心悸 2014-11-26 04:39:39
我想获得进程的一些信息,OpenProcess()后有一小部分进程的返回值不是NULL,其他都是NULL。根据网上提示也设置了SE_DEBUG_NAME权限,但还是OpenProcqiuess()还是会返回NULL。
下面的代码在一个循环中,通过PROCESSENTRY32 ProEntry32 获得进程ID。

HANDLE hToken;
if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES |
TOKEN_QUERY | TOKEN_READ|TOKEN_ALL_ACCESS, &hToken))
{
LUID luid;
if(LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid))
{
TOKEN_PRIVILEGES TokenPrivileges;
TokenPrivileges.PrivilegeCount = 1;
TokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
TokenPrivileges.Privileges[0].Luid = luid;
AdjustTokenPrivileges(hToken, FALSE, &TokenPrivileges, 0, NULL, NULL);
}
CloseHandle(hToken);
}

HANDLE hPro=OpenProcess (PROCESS_QUERY_INFORMATION | PROCESS_VM_READ
,TRUE,ProEntry32.th32ProcessID);

if(hPro != NULL)
{
CString error;
error.Format(_T("%d"),GetLastError()
);
AfxMessageBox(error);
}

...全文
449 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-12-05
  • 打赏
  • 举报
回复
bool AdjustPrivileges() {
    HANDLE hToken;
    TOKEN_PRIVILEGES tp;
    TOKEN_PRIVILEGES oldtp;
    DWORD dwSize=sizeof(TOKEN_PRIVILEGES);
    LUID luid;

    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
        if (GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) return true;
        else return false;
    }
    if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid)) {
        CloseHandle(hToken);
        return false;
    }
    ZeroMemory(&tp, sizeof(tp));
    tp.PrivilegeCount=1;
    tp.Privileges[0].Luid=luid;
    tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
    /* Adjust Token Privileges */
    if (!AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), &oldtp, &dwSize)) {
        CloseHandle(hToken);
        return false;
    }
    // close handles
    CloseHandle(hToken);
    return true;
}
六月心悸 2014-12-05
  • 打赏
  • 举报
回复
引用 2 楼 hlx_beat 的回复:
这些东西 第一就哟啊考虑到杀毒软件的问题 就拿360来说 你知道360有多牛逼么? 你所有调用Windows的API都是假的 都经过360的拦截 由360决定同意是否给你调用。。。
目前发现应该不是360的错误,太纠结了,看来到最后还得用Ntquerysysteminformation
六月心悸 2014-12-05
  • 打赏
  • 举报
回复
引用 2 楼 hlx_beat 的回复:
这些东西 第一就哟啊考虑到杀毒软件的问题 就拿360来说 你知道360有多牛逼么? 你所有调用Windows的API都是假的 都经过360的拦截 由360决定同意是否给你调用。。。
目前发现应该不是360的错误,太纠结了,看来到最后还得用Ntquerysysteminformation
六月心悸 2014-12-05
  • 打赏
  • 举报
回复
引用 2 楼 hlx_beat 的回复:
这些东西 第一就哟啊考虑到杀毒软件的问题 就拿360来说 你知道360有多牛逼么? 你所有调用Windows的API都是假的 都经过360的拦截 由360决定同意是否给你调用。。。
目前发现应该不是360的错误,太纠结了,看来到最后还得用Ntquerysysteminformation
hlx_beat 2014-12-04
  • 打赏
  • 举报
回复
这些东西 第一就哟啊考虑到杀毒软件的问题 就拿360来说 你知道360有多牛逼么? 你所有调用Windows的API都是假的 都经过360的拦截 由360决定同意是否给你调用。。。
六月心悸 2014-11-26
  • 打赏
  • 举报
回复
大神 快点来帮忙呀

64,648

社区成员

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

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