gpt4 book ai didi

c++ - 如何在 Windows 上获取进程工作目录?

转载 作者:可可西里 更新时间:2023-11-01 14:45:12 27 4
gpt4 key购买 nike

如何使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com