如何使用 native API 在 Windows 上获取进程工作目录(对于使用进程句柄或 PID 的另一个进程)?我看过Process and Thread Functions , PSAPI Functions并没有找到。也许是 WMI?
此外,关于这些主题,PSAPI 与进程和线程函数 有何关系?它过时了吗?
最佳答案
为此,您需要比 PSAPI 更重的火炮。以下是操作方法(假定为 x86,省略了错误处理):
ProcessBasicInformation pbi ;
RTL_USER_PROCESS_PARAMETERS upp ;
PEB peb ;
DWORD len ;
HANDLE handle = OpenProcess (PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid) ;
NtQueryInformationProcess (handle, 0 /*ProcessBasicInformation*/, &pbi,
sizeof (ProcessBasicInformation), &len) ;
ReadProcessMemory (handle, pbi.PebBaseAddress, &peb, sizeof (PEB), &len) ;
ReadProcessMemory (handle, peb.ProcessParameters, &upp, sizeof (RTL_USER_PROCESS_PARAMETERS), &len) ;
WCHAR path = new WCHAR[upp.CurrentDirectoryPath.Length / 2 + 1] ;
ReadProcessMemory (handle, upp.CurrentDirectoryPath.Buffer, path, upp.CurrentDirectoryPath.Length, &len) ;
// null-terminate
path[upp.CurrentDirectoryPath.Length / 2] = 0 ;
请注意,除非进程被挂起,否则此方法包含竞争。
关于c++ - 如何在 Windows 上获取进程工作目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14018280/