CommandLineEventConsumer クラス
CommandLineEventConsumer クラスは、イベントが配信されるとローカル システムで任意のプロセスを開始します。 このクラスは、WMI が提供する標準的なイベント コンシューマーの 1 つです。 詳細については、「標準コンシューマーを使用したイベントの監視と対応」を参照してください。
注意
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
-
-
データ型: string
-
アクセスの種類: 読み取り専用
開始するプロセスを指定する標準の文字列テンプレート。 このプロパティは NULL にすることができ、ExecutablePath プロパティはコマンド ラインとして使用されます。
-
-
CreateNewConsole
-
-
データ型: boolean
-
アクセスの種類: 読み取り専用
使用されていません。 このプロパティに値が割り当てられている場合は、トレース メッセージが生成されます。 詳細については、「WMI アクティビティのトレース」を参照してください。
-
-
CreateNewProcessGroup
-
-
データ型: boolean
-
アクセスの種類: 読み取り専用
True の場合、新しいプロセスは新しいプロセス グループのルート プロセスです。 プロセス グループには、このルート プロセスの子孫であるすべてのプロセスが含まれます。 新しいプロセス グループのプロセス識別子は、このプロセス識別子と同じです。 プロセス グループは、コンソール プロセスのグループに Ctrl + C または Ctrl + BREAK シグナルを送信できるようにするために、GenerateConsoleCtrlEvent メソッドによって使用されます。
-
-
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
-
-
データ型: string
-
アクセスの種類: 読み取り専用
使用されていません。 このプロパティに値が割り当てられている場合は、トレース メッセージが生成されます。 詳細については、「WMI アクティビティのトレース」を参照してください。
-
-
ExecutablePath
-
-
データ型: string
-
アクセスの種類: 読み取り専用
実行するモジュール。 文字列では、実行するモジュールの完全なパスとファイル名を指定することも、部分的な名前を指定することもできます。 部分的な名前が指定されている場合は、現在のドライブと現在のディレクトリが想定されます。
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 が呼び出された後、2 秒間フィードバック モードになります。 この 2 秒間に、プロセスが最初の GUI 呼び出しを行うと、システムはプロセスにさらに 5 秒を与えます。 この 5 秒間に、プロセスにウィンドウが表示された場合、システムはウィンドウの描画を完了するためにプロセスにさらに 5 秒を与えます。
KillTimeout
-
データ型: uint32
-
アクセスの種類: 読み取り専用
WMI サービスがプロセスを強制終了する前に待機する秒数。0 (ゼロ) は、プロセスが強制終了されないことを示します。 プロセスの強制終了は、プロセスが無期限に実行されることを阻止します。
MachineName
-
データ型: string
-
アクセスの種類: 読み取り専用
Windows Management Instrumentation (WMI) がイベントを送信するコンピューターの名前。
このプロパティは、__EventConsumer から継承されます。
MaximumQueueSize
-
データ型: uint32
-
アクセスの種類: 読み取り専用
特定のコンシューマーの最大キュー (バイト単位)。
このプロパティは、__EventConsumer から継承されます。
名前
-
データ型: string
-
アクセスの種類: 読み取り専用
-
修飾子: 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
-
データ型: string
-
アクセスの種類: 読み取り専用
プロセスのタイトル バーに表示されるタイトル。 GUI アプリケーションでは、このプロパティは無視されます。
[WorkingDirectory]
-
データ型: string
-
アクセスの種類: 読み取り専用
このプロセスの作業ディレクトリ。
XCoordinate
-
データ型: uint32
-
アクセスの種類: 読み取り専用
新しいウィンドウが作成された場合の、画面の左端からウィンドウの左端までの X オフセット (ピクセル単位)。
XNumCharacters
-
データ型: uint32
-
アクセスの種類: 読み取り専用
新しいコンソール ウィンドウが作成された場合の画面バッファーの幅 (文字の列数単位)。 GUI プロセスでは、このプロパティは無視されます。
XSize
-
データ型: uint32
-
アクセスの種類: 読み取り専用
新しいウィンドウが作成された場合の、新しいウィンドウの幅 (ピクセル単位)。
YCoordinate
-
データ型: uint32
-
アクセスの種類: 読み取り専用
新しいウィンドウが作成された場合の、画面の上端からウィンドウの上端までの Y オフセット (ピクセル単位)。
YNumCharacters
-
データ型: uint32
-
アクセスの種類: 読み取り専用
新しいコンソール ウィンドウが作成された場合の画面バッファーの高さ (文字の行数単位)。 GUI プロセスでは、このプロパティは無視されます。
YSize
-
データ型: uint32
-
アクセスの種類: 読み取り専用
新しいウィンドウが作成された場合の、新しいウィンドウの高さ (ピクセル単位)。
解説
CommandLineEventConsumer クラスは、__EventConsumer 抽象クラスから派生します。
CreateSeparateWowVdm プロパティは、新しいプロセスがプライベート仮想 DOS マシン (VDM) で実行されるかどうかを示します。 個別に実行する利点は、クラッシュした場合に単一の VDM のみが終了することです。 個別の VDM で実行されているプログラムは引き続き正常に機能し、個別の VDM で実行される 16 ビットの Windows ベースのアプリケーションには個別の入力キューがあります。 つまり、あるアプリケーションが一時的に応答を停止した場合、別の VDM 内のアプリケーションは入力を受け取り続けます。 個別に実行する場合の欠点は、実行するためのメモリが大幅に多くなることです。 このプロパティは、ユーザーが 16 ビットの Windows ベースのアプリケーションを独自の VDM で実行するように要求する場合にのみ True に設定する必要があります。
注意
CommandLineEventConsumer は、CreateProcess メソッドを内部的に使用し、ExecutablePath および CommandLineTemplate プロパティを lpApplicationName および lpCommandLine パラメーターとして渡します。 Managed Object Format (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] |
|