可以使用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可以监视使用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使用WMI创建“calc.exe”PID = 667。这该怎么做? 此外,是否有可能阻止在MSFT_WmiProvider_ExecMethodAsyncEvent_Pre事件上创建进程?
答案 0 :(得分:0)
尝试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;
}
否则,如果您需要使用其他属性进行枚举,请查看here。