【发布时间】:2020-03-10 05:12:58
【问题描述】:
我正在尝试解决我的程序无法通过进程 ID (csrss.exe) 获取进程路径的问题。
下面是我在 Visual Studio 2012 上最简单的可重现 C++ 代码:
#include "stdafx.h"
#include <iostream>
#include <psapi.h>
int get_proc_path_by_id(const DWORD dwProcID, TCHAR* procPath)
{
HANDLE h = ::OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION , FALSE, dwProcID);
if (h)
{
if (::GetProcessImageFileName(h, procPath, MAX_PATH))
{
return ERROR_SUCCESS;
}
else
{
return GetLastError();
}
}
else
{
return GetLastError();
}
}
int _tmain(int argc, _TCHAR* argv[])
{
DWORD procID = 1256; // csrss.exe ProcID
TCHAR procPath[MAX_PATH];
int procPathErrorCode = get_proc_path_by_id(procID, procPath);
if(procPathErrorCode == ERROR_SUCCESS)
{
std::wcout << procPath;
}
else
{
std::cout << "Failed with error code : " << procPathErrorCode;
}
return 0;
}
我正在使用进程“csrss.exe”测试此程序,因为我的产品中的原始代码已使用此进程进行测试。
使用管理员权限 Visual Studio 2012 运行代码时,我能够获取进程路径。
但是当我使用管理员权限打开命令提示符并运行此可执行文件时,函数 get_proc_path_by_id 返回错误代码“5”(访问冲突)。
如何让程序能够使用 Admin CMD 获取进程路径?
【问题讨论】: