如何在Windows上使用本地API獲取進程工作目錄(用於使用進程句柄或PID的另一個進程)?我看過Process and Thread Functions,PSAPI Functions並沒有找到。也許WMI?如何在Windows上獲得工作目錄?
此外,關於這些話題,PSAPI如何與進程和線程功能?它過時了嗎?
如何在Windows上使用本地API獲取進程工作目錄(用於使用進程句柄或PID的另一個進程)?我看過Process and Thread Functions,PSAPI Functions並沒有找到。也許WMI?如何在Windows上獲得工作目錄?
此外,關於這些話題,PSAPI如何與進程和線程功能?它過時了嗎?
爲此,您需要比PSAPI更重的火炮。以下是如何做到這一點(86假定,處理省略錯誤):
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 ;
注意,這種方法包含種族,除非該進程被掛起。
這是一部非常重的火炮。有沒有更簡單的方法來做到這一點? – Yury
不是我的最佳知識。 –
爲什麼我會感覺到「如何獲得流程工作目錄」這個詞需要插入一個「a」或「當前」以便從根本上澄清這個問題的意圖? – WhozCraig
@WhozCraig你是對的,這是我的錯誤。英語不是我的母語(我是俄羅斯人,住在俄羅斯),所以我不太瞭解它。 – Yury
一種方法是將DLL注入到代表您調用GetCurrentDirectory的進程中。 –