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 方法,并将 ExecutablePathCommandLineTemplate 属性作为 lpApplicationNamelpCommandLine 参数传递。 以下托管对象格式 (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
Wbemcons.mof
DLL
Wbemcons.dll

另请参阅

标准使用者类

使用标准使用者监视和响应事件

创建逻辑使用者

随时接收事件

__EventConsumer