没有WMI的进程命令行
问题描述:
我在使用PowerShell直接从PEB读取指定进程的命令行时遇到了麻烦。我正在使用NtQueryInformationProcess获取PROCESS_BASIC_INFORMATION数据。没有WMI的进程命令行
# $proc - process handle
if ($NtQueryInformationProcess(
$proc, 0, $PROCESS_BASIC_INFORMATION, [Runtime.InteropServices.Marshal]::SizeOf(
$PROCESS_BASIC_INFORMATION
), [IntPtr]::Zero
))) -eq 0) {
# pointer to RTL_USER_PROCESS_PARAMETERS
$ptr = [Runtime.InteropServices.Marshal]::ReadIntPtr($PROCESS_BASIC_INFORMATION.PebBaseAddress, 0x10)
# pointer to CommandLine field of structure above
$ptr = [Runtime.InteropServices.Marshal]::ReadIntPtr($ptr, 0x40)
# how to get CommandLine field (UNICODE_STRING structure)?
}
所有的指针是正确的,但我不知道如何阅读带有元帅类型的CommandLine字段。有任何想法吗?
答
尽管标题中显示“没有WMI”,但我仍然推荐使用WMI,因为它更容易使用。防爆。通过使用Win32_Process
WMI类。
Get-WmiObject -Class Win32_Process -Filter "ProcessID = '10708'" | Format-List ProcessID, Name, Path, Commandline
ProcessID : 10708
Name : powershell.exe
Path : C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe
Commandline : "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" -version 2
此示例感觉不完整。什么是'$ NtQuerInformationProcess'? '$'是用于变量而'()'用于方法? –
阅读http://*.com/help/mcve –
如果您还没有回答有问题,请不要发布,请。 – kate