Compartilhar via


IEvalRat::TestRating

 
Microsoft DirectShow 9.0

IEvalRat::TestRating

This topic applies to Windows XP Service Pack 1 or later.

The TestRating method determines whether a program with the specified rating should be blocked.

Syntax

  HRESULT TestRating(
  EnTvRat_System  enShowSystem,
  EnTvRat_GenericLevel  enShowLevel,
  LONG  lbfEnShowAttributes
);

Parameters

enShowSystem

[in]  Specifies the rating system, as an EnTvRat_System enumeration type.

enShowLevel

[in]  Specifies the rating level, as an EnTvRat_GenericLevel enumeration type. The meaning of this value depends on the rating system.

lbfEnShowAttributes

[in]  Bitwise combination of zero or more flags from the BfEnTvRat_GenericAttributes enumeration. The flags specify content attributes, such as violence or adult language. Content attributes do not apply to all rating systems.

Return Values

The method returns an HRESULT. Possible values include those in the following table.

Value Description
E_INVALIDARG Invalid argument.
S_FALSE This program is restricted and should be blocked.
S_OK This program is allowed and should not be blocked.

Remarks

The application sets viewing permissions through the IEvalRat::put_BlockedRatingAttributes method. Whenever the Decrypter/Detagger filter receives a new rating in a program, it calls TestRating to determine whether to block the program. If TestRating returns S_OK, the rating is restricted under the current set of viewing permissions, and the Decrypter/Tagger filter blocks the program.

Implementation Note:

For each supported rating system, store a table that contains bitmasks for each level within that system. On object creation, initialize each bitmask to zero. Update the bitmasks in the put_BlockedRatingAttributes method.

In the TestRating method, use the enShowSystem and enShowLevel parameters to perform a table lookup and get the corresponding bitmask. Return S_FALSE if either of the following tests are true:

  • The BfIsBlocked flag is set in the bitmask
  • Any attribute flag in lbfEnShowAttributes is also set in the bitmask.

Use a bitwise AND to test the bitmask. If neither test is true, return S_OK.

The following code shows a possible implementation. It assumes that the object stores the bitmasks in a two-dimensional array named Mask:

if ((0 != Mask[system][level] & BfIsBlocked) || 
    (0 != Mask[system][level] & attributes))
{
    return S_FALSE; // Blocked.
}
else
{
    return S_OK; // Not blocked.
}

Requirements

Header: Tvratings.h.

See Also