特権操作の実行
特権操作には、SeLoadDriverPrivilege (スクリプト API 定数の wbemPrivilegeLoadDriver) などのセキュリティ特権が必要です。これは、デバイス ドライバーを読み込むアカウントに対して有効にする必要がある特権です。 WMI を使用して管理者またはユーザーに特権を追加することはできません。有効にできるのは、アカウントに既にある特権のみです。 権限の一覧については、Privilege_Constantsを参照してください。
既定では、コンピューター上のローカル ユーザーは、プロバイダーが独自の特別なセキュリティ要件を適用しない限り、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
関連トピック