2011-04-19 2 views
4

WMIとCOMが本当に新しいです。CでWMIを使用しているユーザーのペアレンタルコントロールの設定を変更します。

いくつかのパラメータをユーザーアカウントのペアレンタルコントロールに変更したいのですが、 唯一のAPI availbleはWMIです。使用するWMIプロバイダクラスはWpcUserSettingsです。

各ユーザーのパラメータを変更する方法がわかりません。ユーザーごとにこのクラスの ManagmentObjectを作成する必要があるのですか、それとも各ユーザーにインスタンス化されていますか。

あるユーザーが1人のユーザーのためのサンプルコードを与えることができれば、本当に役立ちます。

Thanx!

EDIT: もう一度。あなたの例を使ってユーザーアカウント名とSIDSを取得しました。しかし、私はWpcUserSettingsを検索するときに結果がありません、私はこのクラスをチェックするためにWMI Studioを使用していますので、私は読み取ることができないまたは属性を設定するインスタンスがありません。これを修正する方法がありますか?

FIX:私はそのトリックを見つけました。ペアレンタルコントロールの管理に追加する各ユーザーのManagementObject.InvokeMethod()を使用して、WpcSystemSettingsのメソッドAddUser(SID)を呼び出す必要があります。次に、WpcUserSettingsでペアレンタルコントロールを有効にして、必要な操作を実行できます。 root\CIMV2\Applications\WindowsParentalControls名前空間内に存在

答えて

3

WpcUserSettings WMIクラスは、ユーザがデータを更新するための任意の方法を公開しないが、露出されたすべてのプロパティは明らかSIDプロパティ除くリード/ライトされます。特定のユーザーのプロパティを反復処理して値を変更できます。

ですから、その後、値を更新文を使用して、WMIクエリは、すべてのユーザー SELECT * FROM WpcUserSettings

または特定のユーザー

SELECT * FROM WpcUserSettings Where SID="the SID of the user to modify"

のプロパティを変更するには、この文を取得したいことができます最後にPutメソッドを呼び出して新しい値を設定します。

このサンプルアプリケーションを確認してください。

using System; 
using System.Collections.Generic; 
using System.Management; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      try 
      { 
       ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2\\Applications\\WindowsParentalControls", "SELECT * FROM WpcUserSettings"); 
       foreach (ManagementObject queryObj in searcher.Get()) 
       { 
        if (queryObj["SID"] == "The user SID to modify") 
        { 
         //set the properties here 

         queryObj["AppRestrictions"] = true; 
         queryObj["HourlyRestrictions"] = true; 
         queryObj["LoggingRequired"] = false; 
         //queryObj["LogonHours"] = ; 
         //queryObj["OverrideRequests"] = ; 
         queryObj["WpcEnabled"] = true; 
         queryObj.Put(); 
        } 
       } 
      } 
      catch (ManagementException e) 
      { 
       Console.WriteLine("An error occurred setting the WMI data: " + e.Message); 
      } 
      Console.ReadKey(); 
     } 
    } 
} 
+0

ご清聴ありがとうございます。 – Chakib

+0

App Overridesをプログラムで追加することもできます。私はWpcAppOverrideがそこにいるのを見た。私は上記の書き込みを使用してWindowsインターフェイスから適用された制限を読むことができます。しかし、新しいものを作ることはできません。ありがとう。 – sandeep

+0

プログラム制限を追加するのはどうですか? –

関連する問題