Класс CommandLineEventConsumer
Класс CommandLineEventConsumer запускает произвольный процесс в локальной системе при доставке события. Этот класс является одним из стандартных потребителей событий, которые предоставляет WMI. Дополнительные сведения см. в статье Мониторинг и реагирование на события со стандартными потребителями.
Примечание
При использовании класса CommandLineEventConsumer защитите исполняемый файл, который требуется запустить. Если исполняемый файл не находится в безопасном расположении или защищен с помощью строгого списка управления доступом (ACL), неавторизованный пользователь может заменить исполняемый файл вредоносным исполняемым файлом. Дополнительные сведения о списках управления доступом см. в разделе Безопасность пакета средств разработки программного обеспечения (SDK) Microsoft Windows и в статье Создание дескриптора безопасности для нового объекта.
Синтаксис
[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 имеет следующие типы элементов:
Элемент Property
Класс CommandLineEventConsumer имеет следующие свойства.
-
CommandLineTemplate
-
-
Тип данных: string
-
Тип доступа: только для чтения
Стандартный шаблон строки, указывающий процесс, который необходимо запустить. Это свойство может иметь значение 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). Это свойство может переопределить параметр DefaultSeparateVDM в разделе Windows Win.ini, если задано значение True. Дополнительные сведения см. в разделе Примечания этой статьи.
-
-
CreatorSID
-
-
Тип данных: массив uint8
-
Тип доступа: только для чтения
Идентификатор безопасности (SID), который однозначно идентифицирует пользователя, создающего фильтр. WMI хранит идентификатор безопасности пользователя, создающего экземпляр __EventConsumer , или идентификатор безопасности администратора в зависимости от операционной системы. Дополнительные сведения см. в разделах Привязка фильтра событий к логическому потребителю и Мониторинг и реагирование на события с помощью стандартных потребителей.
Это свойство наследуется от __EventConsumer.
-
-
DesktopName
-
-
Тип данных: string
-
Тип доступа: только для чтения
Не используется. Если этому свойству присвоено значение, создается сообщение трассировки. Дополнительные сведения см. в разделе Трассировка действия WMI.
-
-
Исполняемый путь
-
-
Тип данных: string
-
Тип доступа: только для чтения
Модуль для выполнения. В строке можно указать полный путь и имя файла модуля для выполнения или указать частичное имя. Если указано частичное имя, предполагается текущий диск и текущий каталог.
Свойство ExecutablePath может иметь значение NULL. В этом случае имя модуля должно быть первым маркером с разделителями пробелами в значении свойства CommandLineTemplate . Если используется длинное имя файла, содержащее пробел, используйте строки в кавычках, чтобы указать, где заканчивается имя файла, а аргументы начинают уточнять имя файла.
Примечание
Так как свойство CommandLineTemplate может быть шаблоном, в котором модуль для выполнения предоставляется переменной, свойство NullExecutablePath разрешает выполнение модуля, указанного в параметре , и затем выходит из вашего контроля. Всегда задайте свойство ExecutablePath в регистрации CommandLineEventConsumer , чтобы включить необходимый исполняемый файл, что позволяет избежать перезаписи параметрами событий. Если необходимо использовать шаблон и переменную, чтобы указать модуль для выполнения, будьте осторожны с тем, кому предоставлено полное право на запись в пространстве имен.
-
-
FillAttribute
-
-
Тип данных: uint32
-
Тип доступа: только для чтения
Указывает начальные цвета текста и фона, если в консольном приложении создается новое окно консоли.
-
-
FillAttributes
-
-
Тип данных: uint32
-
Тип доступа: чтение и запись
Исходные цвета текста и фона, если в консольном приложении создается новое окно консоли. Это свойство игнорируется в приложении графического пользовательского интерфейса. Значением может быть любое сочетание следующих значений.
-
-
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 . В течение этих двух секунд, если процесс выполняет первый вызов графического интерфейса пользователя, система дает еще пять секунд для процесса. В течение этих пяти секунд, если процесс показывает окно, система дает еще пять секунд процессу, чтобы завершить рисование окна.
KillTimeout
-
Тип данных: uint32
-
Тип доступа: только для чтения
Число (в секундах), которое ожидает служба WMI, прежде чем завершить процесс 0 (ноль), указывает, что процесс не должен быть завершен. При убийстве процесса процесс не может выполняться на неопределенный срок.
MachineName
-
Тип данных: string
-
Тип доступа: только для чтения
Имя компьютера, на который инструментарий управления Windows (WMI) отправляет события.
Это свойство наследуется от __EventConsumer.
MaximumQueueSize
-
Тип данных: uint32
-
Тип доступа: только для чтения
Максимальная очередь для конкретного потребителя в байтах.
Это свойство наследуется от __EventConsumer.
имя;
-
Тип данных: string
-
Тип доступа: только для чтения
-
Квалификаторы: ключ
Уникальное имя потребителя.
Приоритет
-
Тип данных: sint32
-
Тип доступа: только для чтения
Планирование уровня приоритета потоков процесса. В следующем списке перечислены доступные уровни приоритета.
32 (0x20)
Указывает на обычный процесс без необходимости планирования.
64 (0x40)
Указывает процесс, потоки которого выполняются только в том случае, если система простаивает и вытесняются потоками любого процесса, выполняющегося в классе с более высоким приоритетом. Примером является заставка. Класс неактивного приоритета наследуется дочерними процессами.
128 (0x80)
Указывает процесс, выполняющий высокоприоритетные и критически важные по времени задачи. Потоки процесса класса с высоким приоритетом вытесняют потоки процессов класса с нормальным приоритетом или бездействующего приоритета. Примером является список задач, который должен быстро реагировать на вызов пользователем независимо от нагрузки на систему. Будьте очень внимательны при использовании класса с высоким приоритетом, так как приложение, привязанное к ЦП, с высокоприоритетным классом может использовать почти все доступные циклы.
256 (0x100)
Указывает процесс, имеющий наивысший возможный приоритет. Потоки процесса класса приоритета в режиме реального времени вытесняют потоки всех остальных процессов, включая процессы операционной системы, выполняющие важные задачи. Например, процесс в режиме реального времени, который выполняется более чем за короткий интервал, может привести к тому, что кэши диска не будут очищаться или мышь не отвечает.
RunInteractively
-
Тип данных: boolean
-
Тип доступа: только для чтения
Если задано значение True, процесс запускается в интерактивной службе WinStation. Если задано значение False, процесс запускается в службе WinStation по умолчанию. Это свойство переопределяет свойство DesktopName . Это свойство используется только локально и только в том случае, если интерактивный пользователь является тем же пользователем, который настраивает потребителя.
Начиная с Windows Vista, процесс, запускающий экземпляр CommandLineEventConsumer , запускается под учетной записью LocalSystem и находится в сеансе 0. Службы, которые выполняются в сеансе 0, не могут взаимодействовать с сеансами пользователя.
ShowWindowCommand
-
Тип данных: uint32
-
Тип доступа: только для чтения
Отображение состояния окна. Это может быть любое из значений, которые можно указать в параметре nCmdShow для функции ShowWindow .
UseDefaultErrorMode
-
Тип данных: boolean
-
Тип доступа: только для чтения
Если задано значение True, используется режим ошибок по умолчанию.
WindowTitle
-
Тип данных: string
-
Тип доступа: только для чтения
Заголовок, отображаемый в строке заголовка процесса. Это свойство игнорируется для приложений с графическим интерфейсом пользователя.
WorkingDirectory
-
Тип данных: string
-
Тип доступа: только для чтения
Рабочий каталог для этого процесса.
XCoordinate
-
Тип данных: uint32
-
Тип доступа: только для чтения
X-смещение в пикселях от левого края экрана до левого края окна, если создается новое окно.
XNumCharacters
-
Тип данных: uint32
-
Тип доступа: только для чтения
Ширина буфера экрана в символьных столбцах, если создается новое окно консоли. Это свойство игнорируется в процессе графического пользовательского интерфейса.
XSize
-
Тип данных: uint32
-
Тип доступа: только для чтения
Ширина нового окна (в пикселях) при создании нового окна.
YCoordinate
-
Тип данных: uint32
-
Тип доступа: только для чтения
Смещение по Y в пикселях от верхнего края экрана до верхнего края окна, если создается новое окно.
YNumCharacters
-
Тип данных: uint32
-
Тип доступа: только для чтения
Высота буфера экрана в строках символов, если создается новое окно консоли. Это свойство игнорируется в процессе графического пользовательского интерфейса.
YSize
-
Тип данных: uint32
-
Тип доступа: только для чтения
Высота (в пикселях) нового окна, если новое окно создано.
Комментарии
Класс CommandLineEventConsumer является производным от абстрактного класса __EventConsumer .
Свойство CreateSeparateWowVdm указывает, выполняется ли новый процесс на частном виртуальном компьютере DOS (VDM). Преимущество запуска по отдельности заключается в том, что при сбое завершается только один VDM. Программы, работающие на разных виртуальных машинах, по-прежнему работают нормально, а 16-разрядные приложения windows, работающие в отдельных виртуальных машинах, имеют отдельные очереди ввода. Это означает, что если одно приложение перестает отвечать на запросы, приложения в отдельных виртуальных машинах продолжают получать входные данные. Недостаток запуска по отдельности заключается в том, что для этого требуется значительно больше памяти. Этому свойству следует присвоить значение True , только если пользователь запрашивает, чтобы 16-разрядные приложения windows запускались в собственном VDM.
Примечание
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 |
|