CommandLineEventConsumer 类
当事件传递到本地系统时, CommandLineEventConsumer 类会启动本地系统中的任意进程。 此类是 WMI 提供的标准事件使用者之一。 有关详细信息,请参阅 使用标准使用者监视和响应事件。
注意
使用 CommandLineEventConsumer 类时,保护要启动的可执行文件。 如果可执行文件不在安全位置,或者使用强访问控制列表 (ACL) 进行保护,则未经授权的用户可以将可执行文件替换为恶意可执行文件。 有关 ACL 的详细信息,请访问 Microsoft Windows 软件开发工具包 (SDK) 的安全部分,并参阅“为新对象创建安全描述符”。
语法
[AMENDMENT]
class CommandLineEventConsumer : __EventConsumer
{
uint8 CreatorSID[];
string MachineName;
uint32 MaximumQueueSize;
string CommandLineTemplate;
boolean CreateNewConsole = False;
boolean CreateNewProcessGroup = True;
boolean CreateSeparateWowVdm = False;
boolean CreateSharedWowVdm = False;
string DesktopName;
string ExecutablePath;
uint32 FillAttributes;
boolean ForceOffFeedback = False;
boolean ForceOnFeedback = False;
uint32 KillTimeout = 0;
string Name;
sint32 Priority = 0x20;
boolean RunInteractively = False;
uint32 ShowWindowCommand;
boolean UseDefaultErrorMode = False;
string WindowTitle;
string WorkingDirectory;
uint32 XCoordinate;
uint32 XNumCharacters;
uint32 XSize;
uint32 YCoordinate;
uint32 YNumCharacters;
uint32 YSize;
uint32 FillAttribute;
};
成员
CommandLineEventConsumer 类包含以下类型的成员:
属性
CommandLineEventConsumer 类具有以下属性。
-
CommandLineTemplate
-
-
数据类型: 字符串
-
访问类型:只读
指定要启动的进程的标准字符串模板。 此属性可以是 NULL, 并且 ExecutablePath 属性用作命令行。
-
-
CreateNewConsole
-
-
数据类型: 布尔值
-
访问类型:只读
未使用。 如果为此属性赋值,则会生成跟踪消息。 有关详细信息,请参阅 跟踪 WMI 活动。
-
-
CreateNewProcessGroup
-
-
数据类型: 布尔值
-
访问类型:只读
如果 为 True,则新进程是新进程组的根进程。 进程组包括此根进程的子代的所有进程。 新进程组的进程标识符与此过程标识符相同。 GenerateConsoleCtrlEvent 方法使用进程组,以便向一组控制台进程发送 CTRL+C 或 CTRL+BREAK 信号。
-
-
CreateSeparateWowVdm
-
-
数据类型: 布尔值
-
访问类型:只读
如果 为 True,则新进程在专用虚拟 DOS 计算机中运行, (VDM) 。 这仅在启动在 16 位Windows操作系统上运行的应用程序时有效。 如果设置为 False,则 16 位Windows操作系统上运行的所有应用程序在单个共享 VDM 中作为线程运行。 有关详细信息,请参阅本主题的“备注”部分。
-
-
CreateSharedWowVdm
-
-
数据类型: 布尔值
-
访问类型:只读
如果 为 True, 则 CreateProcess 方法将在共享的 Virtual DOS Machine (VDM) 中运行新进程。 如果设置为 True,则此属性可以覆盖 Win.ini Windows 部分中的 DefaultSeparateVDM 开关。 有关详细信息,请参阅本主题的“备注”部分。
-
-
CreatorSID
-
-
数据类型: uint8 数组
-
访问类型:只读
唯一标识创建筛选器的用户的安全标识符 (SID) 。 WMI 存储创建 __EventConsumer 实例或管理员 SID 的用户的 SID,具体取决于操作系统。 有关详细信息,请参阅 使用逻辑使用者 和 监视和响应标准使用者的事件绑定事件筛选器。
此属性继承自 __EventConsumer。
-
-
DesktopName
-
-
数据类型: 字符串
-
访问类型:只读
未使用。 如果为此属性赋值,则会生成跟踪消息。 有关详细信息,请参阅 跟踪 WMI 活动。
-
-
ExecutablePath
-
-
数据类型: 字符串
-
访问类型:只读
要执行的模块。 字符串可以指定要执行的模块的完整路径和文件名,也可以指定部分名称。 如果指定了部分名称,则假定当前驱动器和当前目录。
ExecutablePath 属性可以为 NULL。 在这种情况下,模块名称必须是 CommandLineTemplate 属性值中的第一个空格分隔标记。 如果使用包含空格的长文件名,请使用带引号的字符串来指示文件名的结尾位置,参数开始澄清文件名。
注意
由于 CommandLineTemplate 属性可以是一个模板,要执行的模块由变量提供,NULLExecutablePath 属性允许在参数中指定的模块执行,然后它脱离了你的控制。 始终在 CommandLineEventConsumer 注册中设置 ExecutablePath 属性以包含所需的可执行文件,从而避免被事件参数覆盖。 如果必须使用模板和变量来指定要执行的模块,请小心谁在命名空间中被授予完全写入权限。
-
-
FillAttribute
-
-
数据类型: uint32
-
访问类型:只读
如果在控制台应用程序中创建新的控制台窗口,则指定初始文本和背景色
-
-
FillAttributes
-
-
数据类型: uint32
-
访问类型:读/写
如果在控制台应用程序中创建新的控制台窗口,则初始文本和背景色。 GUI 应用程序中忽略此属性。 该值可以是以下值的任意组合。
-
-
1 (0x1)
-
蓝色前台
-
2 (0x2)
-
绿色前景
-
4 (0x4)
-
红色前台
-
8 (0x8)
-
前台强度
-
16 (0x10)
-
蓝色背景
-
32 (0x20)
-
绿色背景
-
64 (0x40)
-
红色背景
-
128 (0x80)
-
背景强度
例如,以下组合在白色背景上生成红色文本:
0x4 | 0x40 | 0x20 | 0x10
or
0x74
ForceOffFeedback
-
数据类型: 布尔值
-
访问类型:只读
如果 为 True,则启动进程时,反馈游标被强制关闭。 显示普通游标。
ForceOnFeedback
-
数据类型: 布尔值
-
访问类型:只读
如果 为 True,则调用 CreateProcess 后,游标处于反馈模式两秒。 在这两秒内,如果进程进行第一次 GUI 调用,则系统会为进程再提供 5 秒。 在这五秒内,如果进程显示一个窗口,系统会为进程再提供五秒的时间来完成绘制窗口。
KillTimeout
-
数据类型: uint32
-
访问类型:只读
WMI 服务在终止进程 0 (零) 指示进程不会被终止之前等待的数字(以秒为单位)。 终止进程可防止进程无限期运行。
MachineName
-
数据类型: 字符串
-
访问类型:只读
Windows Management Instrumentation (WMI) 向其发送事件的计算机的名称。
此属性继承自 __EventConsumer。
MaximumQueueSize
-
数据类型: uint32
-
访问类型:只读
特定使用者的最大队列(以字节为单位)。
此属性继承自 __EventConsumer。
名称
-
数据类型: 字符串
-
访问类型:只读
-
限定符: 密钥
使用者的唯一名称。
Priority
-
数据类型: sint32
-
访问类型:只读
计划进程线程的优先级。 以下列表列出了可用的优先级级别。
32 (0x20)
指示不需计划所需的正常过程。
64 (0x40)
指示线程仅在系统空闲时运行的进程,并且被在较高优先级类中运行的任何进程的线程抢占。 例如,屏幕保存程序。 空闲优先级类由子进程继承。
128 (0x80)
指示执行高优先级、时间关键任务的进程。 高优先级类进程的线程抢占正常优先级或空闲优先级类进程的线程。 例如,任务列表在用户调用时必须快速响应,而不管系统上的负载如何。 使用高优先级类时使用极端小心,因为具有高优先级类的 CPU 绑定应用程序几乎可以使用所有可用的周期。
256 (0x100)
指示具有最高优先级的进程。 实时优先级类进程的线程抢占所有其他进程的线程,包括执行重要任务的操作系统进程。 例如,执行超过短暂间隔的实时进程可能会导致磁盘缓存不刷新,或导致鼠标无响应。
RunInteractively
-
数据类型: 布尔值
-
访问类型:只读
如果 为 True,则进程在交互式 WinStation 中启动。 如果 为 False,则进程在默认服务 WinStation 中启动。 此属性替代 DesktopName 属性。 此属性仅在本地使用,并且仅当交互式用户是设置使用者的同一用户时。
从 Windows Vista 开始,运行 CommandLineEventConsumer 实例的进程在 LocalSystem 帐户下启动,并且处于会话 0 中。 在会话 0 中运行的服务无法与用户会话交互。
ShowWindowCommand
-
数据类型: uint32
-
访问类型:只读
窗口显示状态。 它可以是可在 ShowWindow 函数的 nCmdShow 参数中指定的任何值。
UseDefaultErrorMode
-
数据类型: 布尔值
-
访问类型:只读
如果 为 True,则使用默认错误模式。
WindowTitle
-
数据类型: 字符串
-
访问类型:只读
显示在进程的标题栏上的标题。 GUI 应用程序忽略此属性。
WorkingDirectory
-
数据类型: 字符串
-
访问类型:只读
此过程的工作目录。
XCoordinate
-
数据类型: uint32
-
访问类型:只读
如果创建新窗口,则 X 偏移量(以像素为单位),从屏幕的左边缘到窗口的左边缘。
XNumCharacters
-
数据类型: uint32
-
访问类型:只读
如果创建了新的控制台窗口,则屏幕缓冲区宽度(以字符列为单位)。 在 GUI 进程中忽略此属性。
XSize
-
数据类型: uint32
-
访问类型:只读
如果创建新窗口,则为新窗口的宽度(以像素为单位)。
YCoordinate
-
数据类型: uint32
-
访问类型:只读
如果创建了新窗口,则从屏幕的上边缘到窗口上边缘的 Y 偏移量(以像素为单位)。
YNumCharacters
-
数据类型: uint32
-
访问类型:只读
如果创建新的控制台窗口,则屏幕缓冲区高度(以字符行为单位)。 在 GUI 进程中忽略此属性。
YSize
-
数据类型: uint32
-
访问类型:只读
如果创建新窗口,则新窗口的高度(以像素为单位)。
注解
CommandLineEventConsumer 类派生自__EventConsumer抽象类。
CreateSeparateWowVdm 属性指示新进程是否在专用虚拟 DOS 计算机中运行 (VDM) 。 单独运行的优点是,崩溃仅终止单个 VDM。 在不同 VM 中运行的程序继续正常运行,在单独的 VM 中运行的基于 16 位Windows的应用程序具有单独的输入队列。 这意味着,如果一个应用程序暂时停止响应,则单独的 VM 中的应用程序将继续接收输入。 单独运行的缺点是,需要花费更多的内存才能执行此操作。 仅当用户请求基于 16 位Windows的应用程序在其自己的 VDM 中运行时,才应将此属性设置为 True。
注意
CommandLineEventConsumer 在内部使用 CreateProcess 方法,并将 ExecutablePath 和 CommandLineTemplate 属性作为 lpApplicationName 和 lpCommandLine 参数传递。 以下托管对象格式 (MOF) 代码示例未正确使用 CommandLineEventConsumer 。
instance of CommandLineEventConsumer
{
ExecutablePath = "C:\\windows\\system32\\cscript.exe";
CommandLineTemplate = "C:\\scripts\\MyScript.js param1 param2";
};
CreateProcess 方法传递 lpCommandLine 作为argv[0]
,argv[1]
依此推。 由于 argv[0]
对于用于保留可执行文件名称的 16 位应用程序,以前的 MOF 代码会导致创建过程,就像在命令提示符处输入以下命令一样: c:\windows\system32\cscript.exe param1 param2。
上一个命令不会成功,因为Cscript.exe不查看 argv[0]
,因此它无法识别它不包含自己的名称,而是 (“c:\\scripts\\MyScript.js”) 。 以下示例标识 了 CommandLineEventConsumer 的建议用法。
instance of CommandLineEventConsumer
{
ExecutablePath = "C:\\windows\\system32\\cscript.exe";
CommandLineTemplate = "C:\\windows\\system32\\cscript.exe"
"C:\\scripts\\MyScript.js param1 param2";
};
以前使用 CommandLineEventConsumer 会导致在命令提示符下输入以下命令,从而创建过程: c:\windows\system32\cscript.exe c:\scripts\MyScript.js param1 param2
由于“c:\\scripts\\MyScript.js”现已 argv[1]
出现,因此Cscript.exe可以看到命令成功。
有关详细信息,请参阅 CreateProcess 函数。
示例
有关使用 CommandLineEventConsumer 创建使用者的示例,请参阅 基于事件的命令行运行程序。
要求
要求 | 值 |
---|---|
最低受支持的客户端 |
Windows Vista |
最低受支持的服务器 |
Windows Server 2008 |
命名空间 |
Root\subscription |
MOF |
|
DLL |
|