IEvalRat
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
IEvalRat インターフェースは、放送ストリームに含まれるコンテンツのレーティングを評価するために使用します。
解説(Remarks)
このインターフェースのインターフェース識別子 (IID) を宣言するには、__uuidof 演算子を使用します: __uuidof(IEvalRat)。
メソッド 6
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
get_BlockedRatingAttributes メソッドは、指定されたレーティングシステムおよびレーティングレベルに対してコンテンツがブロックされるかどうかを判定します。
| enSystem | EnTvRat_System | in | レーティングシステムを EnTvRat_System 列挙型として指定します。 |
| enLevel | EnTvRat_GenericLevel | in | レーティングレベルを EnTvRat_GenericLevel 列挙型として指定します。この値の意味はレーティングシステムによって異なります。 |
| plbfAttrs | INT* | out | [out, retval] BfEnTvRat_GenericAttributes 列挙体のフラグのビット単位の組み合わせを受け取ります。これらのフラグは、レーティング全体がブロックされるか、またはレーティング内の特定の属性がブロックされるかを示します。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表に示すものがあります。
| 戻り値 | 説明 |
|---|---|
| 引数が無効です。 | |
| NULL ポインター引数です。 | |
| メソッドが成功しました。 |
解説(Remarks)
BfIsBlocked フラグが設定されている場合、指定されたレーティングレベルを持つすべてのコンテンツがブロックされます。BfIsAttr_X フラグのいずれかが設定されている場合、そのレーティングレベルおよび属性を持つコンテンツがブロックされます。
put_BlockedRatingAttributes メソッドは、指定されたレーティングを持つコンテンツをブロックするかどうかを指定します。
| enSystem | EnTvRat_System | in | レーティングシステムを EnTvRat_System 列挙型として指定します。 |
| enLevel | EnTvRat_GenericLevel | in | レーティングレベルを EnTvRat_GenericLevel 列挙型として指定します。この値の意味はレーティングシステムによって異なります。 |
| lbfAttrs | INT | in | BfEnTvRat_GenericAttributes 列挙体の 0 個以上のフラグのビット単位の組み合わせです。これらのフラグは、レーティング全体をブロックするか、またはレーティング内の特定の属性をブロックするかを指定します。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表に示すものがあります。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 |
解説(Remarks)
このメソッドは、レーティングシステム内の各レベルに対する視聴許可を指定するために、レベルごとに 1 回呼び出す必要があります。lbfAttrs パラメーターは、指定されたレーティングレベルに対する許可を示します:
- フラグが設定されていない場合、このレーティングレベルは制限されません。このレーティングレベルを持つ番組はすべて視聴できます。
- BflsBlocked フラグが設定されている場合、このレーティングレベルは制限されます。このレーティングレベルを持つ番組は視聴できません。
- BfIsAttr_1 から BfIsAttr_7 までの範囲のフラグは、暴力や成人向けの言葉などのコンテンツ属性を指定します。これらのフラグのいずれかが設定されている場合、そのコンテンツ属性と指定されたレーティングレベルを持つ番組がブロックされることを意味します。
get_BlockUnRated メソッドは、レーティング情報を持たない番組がブロックされるかどうかを示します。
| pfBlockUnRatedShows | BOOL* | out | Boolean 値を受け取ります。値が TRUE の場合、レーティングのない番組はブロックされます。それ以外の場合はブロックされません。 |
戻り値
解説(Remarks)
put_BlockUnRated メソッドは、レーティング情報が取得されていない番組をブロックするかどうかを指定します。
| fBlockUnRatedShows | BOOL | in | Boolean 値です。レーティングのない番組をブロックするには TRUE を指定し、ブロックしないようにするには FALSE を指定します。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表に示すものがあります。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 |
MostRestrictiveRating メソッドは、2 つのレーティングを比較し、より制限の厳しい方を返します。
| enSystem1 | EnTvRat_System | in | 比較する 1 つ目のレーティングのレーティングシステムです。EnTvRat_System 列挙体のメンバーとして指定します。 |
| enEnLevel1 | EnTvRat_GenericLevel | in | 1 つ目のレーティングのレーティングレベルです。EnTvRat_GenericLevel 列挙体のメンバーとして指定します。 |
| lbfEnAttr1 | INT | in | 1 つ目のレーティングのコンテンツ属性を、BfEnTvRat_GenericAttributes 列挙体のフラグのビット単位の組み合わせとして指定します。 |
| enSystem2 | EnTvRat_System | in | 比較する 2 つ目のレーティングのレーティングシステムです。EnTvRat_System 列挙体のメンバーとして指定します。 |
| enEnLevel2 | EnTvRat_GenericLevel | in | 2 つ目のレーティングのレーティングレベルです。EnTvRat_GenericLevel 列挙体のメンバーとして指定します。 |
| lbfEnAttr2 | INT | in | 2 つ目のレーティングのコンテンツ属性を、BfEnTvRat_GenericAttributes 列挙体のフラグのビット単位の組み合わせとして指定します。 |
| penSystem | EnTvRat_System* | out | より制限の厳しいレーティングのレーティングシステムを受け取ります。 |
| penEnLevel | EnTvRat_GenericLevel* | out | より制限の厳しいレーティングのレーティングレベルを受け取ります。 |
| plbfEnAttr | INT* | out | BfEnTvRat_GenericAttributes 列挙体のフラグのビット単位の組み合わせを受け取ります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表に示すものがあります。
| 戻り値 | 説明 |
|---|---|
| NULL ポインター引数です。 | |
| 2 つのレーティングは異なるレーティングシステムのものです。 | |
| メソッドが成功しました。 |
解説(Remarks)
このメソッドを使用すると、クライアントは 2 つのレーティングのうちどちらがより制限が厳しいかを判定できます。たとえば、MPAA システムでは PG は R よりも制限が厳しくなります。より制限の厳しいレーティングは、penSystem、penEnLevel、plbfEnAttr の各パラメーターで返されます。
このメソッドが 2 つの異なるレーティングシステムのレーティングを比較する場合、1 つ目のシステムが不明 (TvRat_SystemDontKnow) でない限り、1 つ目のシステムで表現されたレーティングを返します。その場合は、2 つ目のシステムを使用したレーティングを返します。
レーティングシステムが同一でない場合、このメソッドは S_FALSE を返します。2 つのシステム間には正確な対応関係が存在しない場合があります。
TestRating メソッドは、指定されたレーティングを持つ番組をブロックすべきかどうかを判定します。
| enShowSystem | EnTvRat_System | in | レーティングシステムを EnTvRat_System 列挙型として指定します。 |
| enShowLevel | EnTvRat_GenericLevel | in | レーティングレベルを EnTvRat_GenericLevel 列挙型として指定します。この値の意味はレーティングシステムによって異なります。 |
| lbfEnShowAttributes | INT | in | BfEnTvRat_GenericAttributes 列挙体の 0 個以上のフラグのビット単位の組み合わせです。これらのフラグは、暴力や成人向けの言葉などのコンテンツ属性を指定します。コンテンツ属性はすべてのレーティングシステムに適用されるわけではありません。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表に示すものがあります。
| 戻り値 | 説明 |
|---|---|
| 引数が無効です。 | |
| この番組は制限されており、ブロックすべきです。 | |
| この番組は許可されており、ブロックすべきではありません。 |
解説(Remarks)
アプリケーションは、IEvalRat::put_BlockedRatingAttributes メソッドを通じて視聴許可を設定します。Decrypter/Detagger フィルターは、番組内で新しいレーティングを受け取るたびに TestRating を呼び出して、その番組をブロックするかどうかを判定します。TestRating が S_OK を返す場合、そのレーティングは現在の視聴許可のセットの下で制限されており、Decrypter/Tagger フィルターはその番組をブロックします。
実装に関する注意:
サポートする各レーティングシステムについて、そのシステム内の各レベルに対応するビットマスクを含むテーブルを保持します。オブジェクトの作成時に、各ビットマスクを 0 に初期化します。ビットマスクは put_BlockedRatingAttributes メソッドで更新します。TestRating メソッドでは、enShowSystem および enShowLevel パラメーターを使用してテーブルルックアップを実行し、対応するビットマスクを取得します。次のいずれかの条件が真である場合は S_FALSE を返します:
- ビットマスクに BfIsBlocked フラグが設定されている
- lbfEnShowAttributes のいずれかの属性フラグがビットマスクにも設定されている。
次のコードは実装の一例を示しています。オブジェクトが Mask という名前の 2 次元配列にビットマスクを格納していることを前提としています:
if ((0 != Mask[system][level] & BfIsBlocked) ||
(0 != Mask[system][level] & attributes))
{
return S_FALSE; // ブロックされます。
}
else
{
return S_OK; // ブロックされません。
}
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IEvalRat "{C5C5C5B1-3ABC-11D6-B25B-00C04FA0C026}" #usecom global IEvalRat IID_IEvalRat "{C5C5C5F1-3ABC-11D6-B25B-00C04FA0C026}" #comfunc global IEvalRat_get_BlockedRatingAttributes 7 int,int,var #comfunc global IEvalRat_put_BlockedRatingAttributes 8 int,int,int #comfunc global IEvalRat_get_BlockUnRated 9 var #comfunc global IEvalRat_put_BlockUnRated 10 int #comfunc global IEvalRat_MostRestrictiveRating 11 int,int,int,int,int,int,var,var,var #comfunc global IEvalRat_TestRating 12 int,int,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_IEvalRat "{C5C5C5B1-3ABC-11D6-B25B-00C04FA0C026}" #usecom global IEvalRat IID_IEvalRat "{C5C5C5F1-3ABC-11D6-B25B-00C04FA0C026}" #comfunc global IEvalRat_get_BlockedRatingAttributes 7 int,int,sptr #comfunc global IEvalRat_put_BlockedRatingAttributes 8 int,int,int #comfunc global IEvalRat_get_BlockUnRated 9 sptr #comfunc global IEvalRat_put_BlockUnRated 10 int #comfunc global IEvalRat_MostRestrictiveRating 11 int,int,int,int,int,int,sptr,sptr,sptr #comfunc global IEvalRat_TestRating 12 int,int,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。