You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

订阅ETW进程启动事件时,如何获取命令行、工作目录等信息?

获取进程启动详细信息的ETW提供者方案

核心需求对应ETW提供者与字段

你要的命令行、工作目录、进程描述可以通过以下ETW组合实现:


1. 命令行 + 工作目录:Microsoft-Windows-ProcessCreation 提供者

这个提供者专门追踪进程创建的完整上下文,其ProcessStart事件(Event ID 1)直接包含:

  • CommandLine:完整的进程启动命令行参数
  • CurrentDirectory:进程启动时的工作目录
  • 额外附带进程ID、父进程ID、可执行文件路径等关键信息

启用与订阅注意:

  • 先通过命令开启日志:wevtutil sl Microsoft-Windows-ProcessCreation/Operational /e:true
  • 订阅时需指定关键字0x8000000000000000(对应PROCESS_CREATE事件组)

2. 进程描述:结合ETW事件与文件版本读取

进程描述属于可执行文件的版本资源,无法直接从单一ETW事件获取,可通过两种方式实现:

  • 方式一:关联Microsoft-Windows-Kernel-Image的ImageLoad事件
    该事件(Event ID 2)会在进程加载主模块时触发,包含ImageName(可执行文件路径),拿到路径后用脚本读取文件的FileDescription字段。
  • 方式二:直接从Microsoft-Windows-ProcessCreation的事件路径读取
    利用ProcessStart事件返回的可执行文件路径,通过PowerShell的Get-ItemProperty或Windows API提取版本信息。

实用PowerShell脚本示例

# 开启ProcessCreation日志(管理员权限执行一次即可)
wevtutil sl Microsoft-Windows-ProcessCreation/Operational /e:true

# 实时订阅并输出所需字段
Get-WinEvent -FilterHashtable @{
    LogName = 'Microsoft-Windows-ProcessCreation/Operational'
    Id = 1
} -Wait | ForEach-Object {
    $props = $_.Properties
    $imagePath = $props[2].Value
    $fileDesc = if (Test-Path $imagePath) {
        (Get-ItemProperty -Path $imagePath -ErrorAction SilentlyContinue).FileDescription
    } else {
        "无法读取"
    }

    [PSCustomObject]@{
        进程ID = $props[0].Value
        父进程ID = $props[1].Value
        命令行 = $props[5].Value
        工作目录 = $props[6].Value
        进程描述 = $fileDesc
        可执行路径 = $imagePath
    } | Format-List
}

替代方案:补充Microsoft-Windows-Kernel-Process的不足

如果你坚持使用Microsoft-Windows-Kernel-Process的Process Start事件(Event ID 1),可以通过进程ID关联查询:

  • 记录事件返回的ProcessID,再通过WMI的Win32_Process类实时查询命令行、工作目录
  • 但这种方式效率低于直接订阅Microsoft-Windows-ProcessCreation

内容的提问来源于stack exchange,提问作者jrpz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 15:09:24