如何获取使用WMI创建的进程的源和目标PID



可以使用WMI COM派生进程,下面是在VBS中生成calc.exe的示例。父级将是作为WMI COM服务器的WmiPrvSE.exe,而不是wscript.exe。任务是挂接在进程创建请求下面。

str = "calc.exe"
Set objWMIService = GetObject("winmgmts:\.rootcimv2")
Set objStartup = objWMIService.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_
Set objProcess = GetObject("winmgmts:\.rootcimv2: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,即使用WMI创建的"wscript.exe sample.vbs"PID=666"calc.exe"PID=667。如何做到这一点?此外,是否有可能阻止在MSFT_WmiProvider_ExecMethodAsyncEvent_Pre事件上创建进程?

尝试Process.Id属性。

Process[] localByName = Process.GetProcessesByName("notepad");
int i = localByName.Length;
while (i > 0)
{
// You can use the process Id to pass to other applications or to
// reference that particular instance of the application.
Console.WriteLine(localByName[i - 1].Id.ToString());
i -= 1;
}

否则,如果您需要使用不同的属性进行枚举,请在此处查看它们。

相关内容

  • 没有找到相关文章

最新更新