【发布时间】:2017-02-14 17:14:17
【问题描述】:
可以使用 WMI COM 生成进程,下面是在 VBS 中生成 calc.exe 的示例。父级是 WmiPrvSE.exe,它是 WMI COM 服务器,而不是 wscript.exe。任务是挂钩下面的流程创建请求。
str = "calc.exe"
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set objStartup = objWMIService.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_
Set objProcess = GetObject("winmgmts:\\.\root\cimv2:Win32_Process")
objProcess.Create str, Null, objConfig, intProcessID
可以使用查询来监控使用 WMI 创建的异步进程:
"SELECT * FROM MSFT_WmiProvider_ExecMethodAsyncEvent_Post WHERE ObjectPath=\"Win32_Process\" AND MethodName=\"Create\"";
执行上述 VBS 脚本时触发事件。但 ManagementEventWatcher 接收到仅提供有用信息的事件命令行:
void OnEventArrived(object sender, System.Management.EventArrivedEventArgs e)
{
string cmdline = e.NewEvent["InputParameters"]["ProcessStartupInformation"]["CommandLine"]
}
而且不可能知道 VBS 起源于生成的 calc.exe。 我需要源和目标 PID,即“wscript.exe sample.vbs”PID=666 创建“calc.exe”PID=667 使用 WMI。这该怎么做? 此外,是否有可能阻止在 MSFT_WmiProvider_ExecMethodAsyncEvent_Pre 事件上创建进程?
【问题讨论】:
-
我已通过链接更新了答案,以便您可以使用更具体的属性,但不幸的是,我不确定您在寻找什么。
-
第 1 篇文章中的查询查找使用 WMI COM 创建的进程,而不仅仅是使用 CreateProcess 创建的。父级不是请求者,而是 WmiPrvSE.exe。 VBS 中的代码添加到根帖子中。