Поделиться через


Класс 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
Wbemcons.mof
DLL
Wbemcons.dll

См. также раздел

Стандартные классы потребителей

Мониторинг и реагирование на события с помощью стандартных потребителей

Создание логического потребителя

Получение событий в любое время

__EventConsumer