ペアナル コントロールの設定 API の使用
ログ記録はユーザーの設定に条件付きであるため、ログ記録の前に設定について説明します。
WMI API 設定の書き込み/読み取り
WMI API は、Wpcsprov.mof スキーマ ファイルで定義されている Parental Controls インフラストラクチャによってインスタンス化されたすべての設定に、抽象化されていない (未加工) アクセスを提供します。 設定ストアは、スキーマを定義する次のクラス定義を持つ \root\CIMV2\Applications\WindowsParentalControls 名前空間に存在します。 機能拡張要素が示されています。
コンピューターごと:
- WpcSystemSettings (1 つのインスタンス)
- AddUser() メソッドと RemoveUser() メソッドを使用して、特定の SID のペアレンタル コントロール設定をそれぞれ作成および削除します。
- 現在有効なゲーム評価システムのプロパティ、およびログの管理者チェックに関連する追跡と通知。
- 機能拡張: Web コンテンツ フィルター用の読み取り専用および読み取り/書き込み HTTP アプリケーションおよび URL 除外リストのプロパティ、Web コンテンツ フィルターのオーバーライド ID と名前リソース DLL パスと ID、およびフィールドとヘッダー名の登録のカスタム ログ イベント番号。
- WpcRatingsSystem (インストールされている各評価システムごとに 1 つのインスタンス)
- WpcRating (評価レベルごとに 1 つのインスタンス)。
- WpcRatingDescriptor (評価記述子ごとに 1 つのインスタンス)。
- 機能拡張: WpcExtension (ペアレンタル コントロール パネルの機能拡張リンクごとに 1 つのインスタンスが追加されます)。
- GUID、サブシステム、ID、イメージ リソース パス、無効な状態のイメージ リソース パス、実行可能パス、表示名リソース DLL パスと ID、サブタイトル リソース DLL パスと ID のプロパティ。
制御されたユーザー数:
WpcUserSettings (制御されたユーザーごとに 1 つのインスタンス)
SID、ペアレンタル コントロールのオン/オフ フラグ、ログオン/オフ フラグ、オン/オフ フラグの時間制限、有効なフラグのオーバーライド、ログオン時間マスク、および一般的なアプリケーション制限のオン/オフ フラグのプロパティ。
Windows 8では、既存の プロパティは各時間の最初の 30 分を表します。 各時間の後半を表す新しい 30 分プロパティが追加されました。 1 日の時間の許容量を表す新しいプロパティが追加されました。
Windows 7 と Windows Vista: タイマー制限では、1 時間の細分性がサポートされました。
WpcWebSettings (制御されたユーザーごとに 1 つのインスタンス)
- SID を所有するためのプロパティ、フィルターオン/オフ フラグ、フィルター レベル、ファイルダウンロードブロックフラグ、評価されていないサイトブロックフラグ。
WpcUrlOverride (URL オーバーライド リストで明示的に許可または拒否された URL ごとに 1 つのインスタンスが Web コンテンツ フィルター処理の許可/ブロック リストとして使用されます)
- SID を所有するためのプロパティ、影響を受ける URL、許可/ブロックされた状態。
WpcAppOverride (一般的なアプリケーション制限アプリケーションオーバーライドリストで明示的に許可されているパスごとに 1 つのインスタンス)
- SID を所有するためのプロパティ。 SAFER ルール ID、アプリケーションへのパス。
WpcGamesSettings (制御されたユーザーごとに 1 つのインスタンス)
- SID を所有するためのプロパティ、ゲーム許可フラグ、これらの設定の評価システムの GUID、評価されていないゲーム フラグ、現在のシステムで許可されている最大評価の ID、拒否された記述子のコレクション。
WpcGameOverride (アプリケーション ID ごとに 1 つのインスタンスが明示的に許可または拒否)
- SID を所有するためのプロパティ、ゲームを識別するアプリケーション ID、許可/拒否状態。
データ表現に関するメモ
スキーマ内のいくつかの設定は、属性non_nullを持つ .mof ファイルによって制約されます。 これらは null バリアントに設定できません。 配列以外のすべての型について、Parental Controls コードは値を初期化します。 配列の場合、空の状態は、null バリアント、空のバリアント、または 0 サイズのバリアント配列を使用して記述できます。 WMI プロバイダーは、読み取り時にこれらのすべてを null バリアント状態表現に正規化します。
ユーザー インターフェイスの機能拡張リンクに関するメモ
WMI を使用して UI 拡張機能リンクを登録するには、次の情報を指定する必要があります。
- GUID - 複数のリンクが共通のパッケージまたはスイートの一部である場合、同じ GUID を共有できます。
- サブシステム - スイートやスタンドアロン準拠アプリケーションなど、リンクの種類の分類を示すことを目的としています
- 名前リソース DLL パスと ID - リンクに表示される表示名のリソースを指定します。
- サブタイトル リソース DLL パスと ID - 名前の下に追加のテキストのリソースを指定します。
- 画像パス - 24 × 24 ピクセル ビットマップ (BMP) の完全パス。ピクセルあたりの色深度は 8 ビットで、好ましくはアルファ チャネルです。 これは、シェル拡張子 (ファイル システム パス>、<負のリソース ID\1>) <と一致する方法で指定されます。 例として、C:\Windows\System32\Wpccpl.dll、-20。
- 無効なイメージ パス - 無効な状態を示すビットマップのバリアントを除き、上記のイメージ パスと同じです。 この画像は、ペアレンタル コントロールがオフの場合に表示されます。
- Exe パス - ShellExecute() を使用して呼び出される実行可能ファイルへの完全パス。 このパスは円記号で指定する必要があります。または、リンクによって実行可能ファイルが呼び出されません。 exe パスの後に %SID% トークンを追加すると、リンクが実行され、ハブ ページが現在表示されているユーザーの SID 文字列が置き換えられるようになります。 その後、実行可能ファイルは SID 文字列を使用して、指定されたユーザーの機能を管理できます。
アプリケーションのアンインストールでは、機能拡張リンクの登録を削除する必要があります。
Web 機能拡張リンクと Web コンテンツ フィルターの上書きに関するメモ
FilterID プロパティを既存の登録済み UI 拡張機能リンクと同じ GUID に設定すると、表示されるリンクは、[その他の設定] の汎用リンクから排他的な Web 制限リンクに昇格されます。 これはコンピューター全体の設定であるため、インボックスの Web コンテンツ フィルター LSP は、制御されているすべてのユーザーのすべてのフィルター処理をバイパスします。 リソース DLL と ID へのパスで指定される FilterName プロパティにもわかりやすい名前を設定する必要があります。
Parental Controls システムでは、オーバーライドする Web フィルターから次のことをお勧めします。
- ユーザーのペアレンタル コントロールの全体的なオン/オフ状態を考慮します。
- ユーザーのアクティビティ レポート設定を優先します。
- FilterID プロパティを監視します。 ベンダーの指定した GUID から変更された場合は、別のフィルターが所有権を取得しており、ベンダーのフィルター自体を無効にする必要があります。 この変更を WMI 呼び出しと比較して定期的にチェックするオーバーヘッドを減らすために、COM インターフェイスが追加されました。
- 読み取り専用と読み取り/書き込みの両方の HTTP アプリケーションと URL 除外リストエントリを優先することを強くお勧めします。
- ユーザーごとの URL オーバーライド リスト (許可/ブロック リスト) を優先することをお勧めします。
- 高速なユーザー切り替えに堅牢です。
ペアレンタル コントロールでは、Web やその他のコンテンツ フィルターを Windows にプラグインしてフィルター処理を実装する方法に制限はありません。 ベンダーは、現在の投資や優先テクノロジ (LSP、TDI、その他) を活用できます。
ベンダーのフィルターのアンインストールでは、FilterID エントリと FilterName エントリの登録を解除する必要があります。 これは、FilterID を GUID_NULL に設定し、FilterName をバリアント null に設定することで実行されます。 その後、インボックス Web コンテンツ フィルターが再び有効になります。
インボックス Web フィルターを再度有効にすると、新しいセッションのみがフィルター処理され、スイッチの前からアクティブなセッションはフィルター処理されないことに注意してください。
Web コンテンツ フィルターの許可/ブロック リストのエクスポート/インポート形式
この機能は、Windows 8ではサポートされていません。
Windows 7 と Windows Vista: この機能はサポートされています。
<WebAddresses>
<URL AllowBlock="1">https://alloweddomain.com/</URL>
<URL AllowBlock="1">https://allowedurl.com/allowed/default.html</URL>
<URL AllowBlock="2">https://blockeddomain.com/</URL>
<URL AllowBlock="2">https://blockedurl.com/blocked/default.html</URL>
</WebAddresses>
アプリケーション制限のオーバーライドに関するメモ
アプリケーション制限のオーバーライドは、特定のバイナリまたはパスを許可するために、ユーザーごとに設定されます。 新しい親制御ユーザーが構成されていて、そのユーザーに対してアプリケーションの制限のオーバーライドが必要な場合は、レジストリの Windows 実行キーを、オーバーライドを書き込むための昇格が必要とマークされた小さなアプリケーションで使用することをお勧めします。 これにより、ユーザーのオーバーライドを構成するための 1 回限りの資格情報プロンプトが表示されます。その後、管理者による上書きプロンプトが追加されるため、オーバーライドのターゲット バイナリはユーザーにとって迷惑になりません。
設定の変更を有効にするために必要なアクション
管理者がログインしている標準ユーザーの設定を変更すると、警告メッセージが生成されます。 これは、制御されたユーザーがログアウトして再びログインするまで、設定の変更が有効にならない可能性があることを示しています。 これは保守的な設計です。 ほとんどの設定は、制御されたユーザーがログインしている間、ほぼ直ちに有効になります。 例外の 1 つはゲームの場合で、次にゲーム エクスプローラーを実行するか、ゲームを呼び出そうとしたときに設定が有効になります。
サンプル コード
C++ のサンプルは、設定の拡張機能の使用を示す SDK で提供されています。 「ペアレンタル コントロールのサンプル」セクションを参照してください。
独立したTest Tools
クラスとインスタンスの検査は、Wmimgmt.msc プラグインとWbemtest.exe ツールによって容易になります。
64 ビットの考慮事項
64 ビット Windows オペレーティング システムのバージョンには、現在、32 ビット WMI プロバイダーと 64 ビット プロバイダーの両方がインストールされています。
一般的なコード開発とデバッグ
設定管理コード開発に Visual Studio を使用する場合、ローカル デバッグでは、管理者権限で Visual Studio を実行する必要があります (コマンド ラインまたは右クリック オプションを使用して管理者として実行を呼び出します)。 これは、UAC によって実装されたプロセスとメッセージの分離によるものです。
最小コンプライアンス API 設定読み取り
インターフェイスとメソッド
ヘッダー ファイル Wpcapi.h によって制御されるコンプライアンス API は、COM インターフェイスを使用して、次の設定への読み取り専用アクセスを簡略化します。
IWindowsParentalControls ルート インターフェイス メソッドは、次へのアクセスを提供します。
- IWPCSettings メソッド:
- IsLoggingRequired()— アクティビティ レポートはユーザーに対して として構成されていますか?
- GetLastSettingsChangeTime()— アプリケーションは、以前のチェック以降に設定ポリシーが変更されたかどうかを認識できます。
- GetRestrictions()— Web の制限、制限時間、ゲームの制限、またはアプリケーションの制限がオンに設定されているかどうかを読み取ります。
- IWPCWebSettings メソッド:
- GetSettings() は、フィルターのオンとオフのフラグを取得し、ダウンロードがブロックされます。
- RequestURLOverride()— 承認する URL を含むダイアログ ボックスを表示する管理者オーバーライド (肩越し承認) メカニズムに要求を入力します。
- IWPCGamesSettings メソッド:
- IsBlocked() は、特定のゲーム アプリケーション ID に対して、親コントロールによってブロックされるゲームであり、どのような理由でブロックされます。
- GetVisibility()— ペアレンタル コントロール UI が現在非表示になっているかどうかに関する情報を提供します。
- GetWebFilterInfo()— 現在アクティブな Web コンテンツ フィルターの ID を取得するためのインターフェイスを提供します。
サンプル コード
C++ サンプルは、コンプライアンス API の使用を示す SDK で提供されています。 「ペアレンタル コントロールのサンプル」セクションを参照してください。