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
-
-
数据类型:boolean
-
访问类型:只读
未使用。 如果为此属性赋值,则会生成跟踪消息。 有关详细信息,请参阅跟踪 WMI 活动。
-
-
CreateNewProcessGroup
-
-
数据类型:boolean
-
访问类型:只读
如果为 True,则新进程是新进程组的根进程。 进程组包括此根进程的所有子代进程。 新进程组的进程标识符与此进程标识符相同。 GenerateConsoleCtrlEvent 方法使用进程组来向一组控制台进程发送 Ctrl+C 或 CTRL+BREAK 信号。
-
-
CreateSeparateWowVdm
-
-
数据类型:boolean
-
访问类型:只读
如果为 True,则新进程在专用虚拟 DOS 计算机 (VDM) 中运行。 仅在启动在 16 位 Windows 操作系统上运行的应用程序时有效。 如果设置为 False,则 16 位 Windows 操作系统上运行的所有应用程序在单个共享 VDM 中作为线程运行。 有关详细信息,请参阅本主题的“备注”部分。
-
-
CreateSharedWowVdm
-
-
数据类型:boolean
-
访问类型:只读
如果为 True,则 CreateProcess 方法在共享的虚拟 DOS 计算机 (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
或
0x74
ForceOffFeedback
-
数据类型:boolean
-
访问类型:只读
如果为 True,则在进程启动时强制关闭反馈光标。 显示普通光标。
ForceOnFeedback
-
数据类型:boolean
-
访问类型:只读
如果为 True,则调用 CreateProcess 后光标处于反馈模式两秒钟。 在这两秒内,如果进程进行第一次 GUI 调用,系统会再给进程 5 秒。 在这五秒内,如果进程显示一个窗口,系统会再给进程 5 秒以完成窗口的绘制。
KillTimeout
-
数据类型:uint32
-
访问类型:只读
WMI 服务在终止进程 0(零)之前等待的数字(以秒为单位)表示不会终止进程。 终止进程会阻止进程无限期运行。
MachineName
-
数据类型:字符串
-
访问类型:只读
Windows Management Instrumentation (WMI) 向其发送事件的计算机名称。
此属性继承自 __EventConsumer。
MaximumQueueSize
-
数据类型:uint32
-
访问类型:只读
特定使用者的最大队列数(以字节为单位)。
此属性继承自 __EventConsumer。
名称
-
数据类型:字符串
-
访问类型:只读
-
限定符:key
使用者的唯一名称。
优先级
-
数据类型:sint32
-
访问类型:只读
计划进程线程的优先级。 以下列表列出了可用的优先级。
32 (0x20)
指示没有计划需求的正常进程。
64 (0x40)
指示一个进程,其线程仅在系统空闲时运行,并且可以被在较高优先级类中运行的任何进程的线程所抢占。 例如,屏幕保护程序。 此优先级类由子进程继承。
128 (0x80)
指示执行高优先级时间关键任务的进程。 高优先级类进程的线程会抢占正常优先级或空闲优先级类进程的线程。 例如,任务列表,无论系统上的负载如何,它都必须在用户调用时快速响应。 使用高优先级类时要格外小心,因为具有高优先级类的 CPU 绑定应用程序几乎可以使用所有可用的周期。
256 (0x100)
指示具有最高优先级的进程。 实时优先级类进程的线程会抢占所有其他进程的线程,包括执行重要任务的操作系统进程。 例如,执行时间超过短时间的实时进程可能会导致磁盘缓存不刷新,或导致鼠标无响应。
RunInteractively
-
数据类型:boolean
-
访问类型:只读
如果为 True,则进程在交互式 WinStation 中启动。 如果为 False,则进程在默认服务 WinStation 中启动。 此属性替代 DesktopName 属性。 此属性仅在本地使用,并且仅当交互式用户是设置使用者的同一用户时才使用。
从 Windows Vista 开始,运行 CommandLineEventConsumer 实例的进程在 LocalSystem 帐户下启动,并在会话 0 中。 在会话 0 中运行的服务无法与用户会话交互。
ShowWindowCommand
-
数据类型:uint32
-
访问类型:只读
窗口显示状态。 它可以是在 ShowWindow 函数的 nCmdShow 参数中指定的任何值。
UseDefaultErrorMode
-
数据类型:boolean
-
访问类型:只读
如果为 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。 在不同 VDM 中运行的程序将继续正常运行,在单独的 VDM 中运行的基于 Windows 的 16 位应用程序具有单独的输入队列。 这意味着,如果一个应用程序暂时停止响应,单独的 VM 中的应用程序也会继续接收输入。 单独运行的缺点是需要大量内存才能实现。 仅当用户请求基于 Windows 的 16 位应用程序在其自己的 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]
等传递。 由于适用于 16 位应用程序的 argv[0]
曾经保留用于可执行文件名,因此以前的 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 |
|