我用了相关的函数获取进程,但结果里有小部分的程序进程的路径信息没有,请问如何解决啊,我看那几个进程好像不是应用程序进程。可能是函数权限不够啊,请指教

解决方案 »

  1.   

    你采用什么API实现的,又是什么进程没有路经?
      

  2.   

    HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags,DWORD th32ProcessID); OpenProcess();GetModuleFileNameEx();GetModuleFilePathEx();
    这些都在msdn中找的。比如:alg.ex
          lsass.exe
          smss.exe
    它们的路径都获得不了,而普通应用程序都可获得
     
      

  3.   

    权限提升没?这些系统进程要提升到Debug权限才可以的.而且提升到Debug权限,你必须运行在管理员权限下.(值得一说的是smss不是win32程序).
    列举模块前先调用一下:EnableDebugPrivilege(TRUE)
    代码如下..
    BOOL EnableDebugPrivilege(BOOL bEnable) 
    {
    // 附给本进程特权,以便访问系统进程
    BOOL bOk = FALSE; 
    HANDLE hToken;// 打开一个进程的访问令牌
    if(::OpenProcessToken(::GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) 
    {
    // 取得特权名称为“SetDebugPrivilege”的LUID
    LUID uID;
    ::LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &uID);// 调整特权级别
    TOKEN_PRIVILEGES tp;
    tp.PrivilegeCount = 1;
    tp.Privileges[0].Luid = uID;
    tp.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0;
    ::AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);
    bOk = (::GetLastError() == ERROR_SUCCESS);// 关闭访问令牌句柄
    ::CloseHandle(hToken);
    }
    return bOk;
    }