特権操作の実行

特権操作にはセキュリティ特権が必要です。たとえば、デバイス ドライバーを読み込むアカウントでは、SeLoadDriverPrivilege (スクリプト API 定数wbemPrivilegeLoadDriver) を有効にする必要があります。 WMI を使用して管理者やユーザーに特権を追加することはできません。有効にできるのは、アカウントが既に持っている特権のみです。 詳細については、「特権定数」を参照してください。

既定では、プロバイダー独自の特別なセキュリティ要件が適用されている場合を除き、コンピューター上のローカル ユーザーには、"WMI リポジトリ" からの静的データの読み取り、プロバイダーから提供されたインスタンスへの書き込み、プロバイダー メソッドの実行が許可されます。 リモート コンピューターに接続したり、セキュリティ記述子を変更したり、WMI クラス定義などの静的 WMI リポジトリ データに変更を加えたりできるのは管理者だけです。 リモート接続に対してすべての特権が有効になっています。 詳細については、「リモート WMI 接続のセキュリティ保護」を参照してください。

C++ の特権定数は、Visual Basic などのオートメーション言語で使用されるものとは異なります。 スクリプトでは、名前ではなく定数の値を使用する必要があります。 詳細については、「C++ を使用した特権操作の実行」または「VBScript を使用した特権操作の実行」を参照してください。

WMI の使用時に起こるアクセス拒否エラーの一般的な原因は、操作に必要な特権が有効にされていないことです。たとえば、Win32_NTEventlogFile のすべてのインスタンスを取得する操作が挙げられます。 SeSecurity 特権を有効にしないと、セキュリティ ログ ファイルにアクセスできません。

次の VBScript コード例は、モニカー文字列で SeSecurity 特権を設定する方法を示しています。 かっこ内の特権名は、モニカーで使用するときは、先頭の "Se" を除いて記述します。 詳細については、「モニカー文字列の作成」を参照してください。

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate,(Security)}!\\" _
    & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery _
    ("Select * from Win32_NTEventLogFile " _
    & "Where LogFileName='Security'")
For Each LogFile in colFiles
Wscript.Echo LogFile.NumberOfRecords
Next

特権定数