名前空間をまたがる永続イベント サブスクリプションの実装

すべての永続サブスクリプションを \root\subscription 名前空間にコンパイルすることをお勧めします。 これにより、使用されている各名前空間に永続的なコンシューマーをコンパイルする必要がなくなります。つまり、永続的なサブスクリプションを検索する名前空間は 1 つだけです。 名前空間をまたがるサブスクリプションを実装するには、__EventFilterEventNamespace プロパティを使用します。

CommandLineEventConsumer を使用する場合は、起動する実行可能ファイルをセキュリティで保護することが重要です。 実行可能ファイルが安全な場所にない場合、または強力なアクセス制御リスト (ACL) で保護されている場合、すべてのユーザーが実行可能ファイルを自分のファイルに置き換えることができます。 ACL の詳細については、「C++ での新しいオブジェクトのセキュリティ記述子の作成」を参照してください。

次の Managed Object Format (MOF) コード例は、名前空間にまたがるサブスクリプションを示しています。

#pragma namespace("\\root\\subscription")

instance of __EventFilter as $FLT
{
  Name = "Filter";
  Query = "SELECT * FROM __InstanceModificationEvent "
          "WHERE TargetInstance ISA \"Win32_LocalTime\" "
          "AND TargetInstance.Hour = 8 "
          "AND TargetInstance.Minute = 0 "
          "AND TargetInstance.Second = 0 "
          "AND TargetInstance.DayOfWeek = 6";
  QueryLanguage = "WQL";
  EventNamespace = "root\\cimv2";
};

instance of CommandLineEventConsumer as $CONS
{
  ExecutablePath = "cmd.exe";
  ShowWindowCommand = 7;
  RunInteractively = true;
};

instance of __FilterToConsumerBinding
{
  Consumer = $CONS;
  Filter = $FLT;
};