クライアント アプリケーションのプロセス セキュリティの設定

WMI インターフェイスを呼び出すクライアント アプリケーションでは、プロセスのセキュリティ レベルを制御できます。 すべての WMI アプリケーションは COM を介して WMI にアクセスします。プロセスのセキュリティを設定するには、COM 関数 CoInitializeSecurity を呼び出すことができます。 WMI への非同期呼び出しを行うアプリケーションと、イベント コンシューマーとして登録されるアプリケーションは、WMI への呼び出しでセキュリティ レベルを設定します。

CoInitializeSecurity を明示的に呼び出さない場合、COM ではレジストリの値を使用して暗黙的に呼び出します。 ただし、レジストリ値には、WMI に必要なセキュリティを提供しない偽装と認証用の低い設定が含まれている場合があります。 詳細については、「C++ を使用した既定のプロセス セキュリティ レベルの設定」を参照してください。

WMI への非同期アクセスは推奨されません。 非同期コールバックを使用すると、認証されていないユーザーがシンクにデータを提供できます。 これは、スクリプトとアプリケーションに対するセキュリティ リスクとなります。 リスクを排除するには、半同期または同期通信を使用するか、クライアント アプリケーションで適切なアクセス チェックを実行します。 詳細については、メソッドの呼び出しに関するページを参照してください。

WMI プロキシ (IWbemServicesIEnumWbemClassObjectIWbemCallResult、または IWbemRefresher) への呼び出しでは、アウトプロセス ポインターが使用されます。 既定値と推奨事項の詳細については、「IWbemServices およびその他のプロキシでのセキュリティの設定」を参照してください。

次の手順では、アプリケーション プロセスで WMI のセキュリティを設定するために実行する必要がある手順について説明します。

アプリケーション プロセスで WMI のセキュリティを設定するには

  1. クライアント アプリケーションを実行する Windows オペレーティング システムに必要なセキュリティ レベルを決定します。
  2. COM の CoInitializeSecurity 関数を呼び出して、クライアント アプリケーションを実行するプロセスの既定のセキュリティを設定します。 これにより、アプリケーションで実行されているプロセスに他のアプリケーションがアクセスするために必要なセキュリティのレベルが宣言されます。
  3. IWbemServices への別の呼び出しなど、個々のプロキシでセキュリティを変更する必要がある場合は、CoSetProxyBlanket を呼び出します。
  4. リモート ハードウェア、またはより多くの特権を必要とするシステム オブジェクトを制御する必要がある場合は、AdjustTokenPrivileges 関数を使用して必要な特権を有効にします。 プロセスにまだ割り当てられていない特権は有効にできないことに注意してください。 詳細については、「プライベート オブジェクトへのアクセスの確認」を参照してください。

既定のプロセス セキュリティ レベルの設定の詳細については、「C++ を使用した既定のプロセス セキュリティ レベルの設定」と「VBScript を使用した既定のプロセス セキュリティ レベルの設定」を参照してください。