DRM バージョン 1 を使用したファイルの保護

[このページに関連付けられている機能である Windows Media Format 11 SDK は、レガシ機能です。 これは、ソース リーダーシンク ライターによって置き換えられます。 ソース リーダーシンク ライターは、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、Windows Media Format 11 SDK ではなくソース リーダーシンク ライターを使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

この種の保護が適用されると、ライセンス要求が行われたコンピューターでのみ有効な DRM バージョン 1 ライセンスが生成されます。 キーまたはキー シードが設定されていないため、この手法を使用して保護されたコンテンツのポータブル ライセンスを生成する方法はありません。 ただし、Windows Media Format SDK 7.1 以降を使用する場合、ライセンスは Microsoft ライセンス移行サービスで回復できます。

DRM バージョン 1 を使用して ASF ファイルを保護するには、次の手順を実行します。

  1. WMStubDRM.lib ファイルをプロジェクトにリンクし、必要に応じて wmvcore.lib のリンクを解除します。

  2. WMCreateWriter 関数を呼び出してライターを作成します。 最初の引数は予約されており、 NULL に設定する必要があります。

  3. IWMWriter::SetProfile または IWMWriter::SetProfileByID を呼び出して、使用するライターのプロファイルを設定します。 DRM 属性を設定する前に、ライターでプロファイルを設定する必要があります。 DRM は、Windows Media Audio または Windows Media Video コーデックを使用するプロファイルでのみサポートされます。

  4. IWMHeaderInfo::SetAttribute メソッドを使用して、次の DRM プロパティを設定します。 Use_DRM プロパティは、DRM バージョン 1 を使用してコンテンツを保護するように DRM コンポーネントに指示します。 DRM_Flags プロパティは、コンテンツに対して作成されるローカル ライセンスに含める権限を指定します。 DRM_LEVEL値もライセンスに格納されます。コンテンツにアクセスするために必要な最小レベルを指定します。 DRM バージョン 1 コンテンツの推奨レベルは 150 です。

    属性
    Use_DRM TRUE
    DRM_Flags WMT_RIGHT_PLAYBACK |WMT_RIGHT_COPY_TO_NON_SDMI_DEVICE |WMT_RIGHT_COPY_TO_CD
    DRM_LEVEL 150

     

次のコード例は、DRM バージョン 1 の DRM 対応ライターを作成し、DRM プロパティを設定する方法を示しています。 明確にするために、エラー チェックは省略されています。

BOOL  fUseDRM    = TRUE;
// These are the rights we will apply to the file. See WMT_RIGHTS for
// the full set of possible rights.

DWORD dwDRMFlags = WMT_RIGHT_PLAYBACK | 
                   WMT_RIGHT_COPY_TO_NON_SDMI_DEVICE | 
                   WMT_RIGHT_COPY_TO_CD;

// Set the minimum required DRM level low enough
// to allow older players to access the content.
DWORD dwDRMLevel = 150;

IWMDRMWriter*  pWMDRMWriter  = NULL;
HRESULT hr = S_OK;

// Initialize COM.
hr = CoInitialize(NULL);

// Create a writer object.
hr = WMCreateWriter( NULL, &pWMDRMWriter);

// Obtain the IWMHeaderInfo interface.
hr = pWMDRMWriter -> QueryInterface(IID_IWMHeaderInfo, 
                                   (void**) &pWMHeaderInfo);

// Tell the SDK runtime to protect the file using DRM version 1.
hr= pWMHeaderInfo-> SetAttribute(0,
                                 g_wszWMUse_DRM,
                                 WMT_TYPE_BOOL,
                                 (BYTE*)&fUseDRM,
                                 sizeof(BOOL));

// Specify the rights that will be stored in the local license that is
// created automatically for the content.
hr= pWMHeaderInfo->SetAttribute( 0,
                                 g_wszWMDRM_Flags, 
                                 WMT_TYPE_DWORD,
                                 (BYTE *)&dwDRMFlags,
                                 sizeof(DWORD) );

// Set the DRM_Level attribute in the file's DRM header.
hr= pWMHeaderInfo->SetAttribute( 0,
                                 g_wszWMDRM_Level, 
                                 WMT_TYPE_DWORD,
                                 (BYTE *)&dwDRMLevel,
                                 sizeof(DWORD) );