共用方式為


使用 DRM 第 1 版保護檔案

[與此頁面相關聯的功能 Windows Media Format 11 SDK是舊版功能。 來源讀取器和接收寫入器已取代它。 來源讀取器和接收寫入器已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用來源讀取器和接收寫入器,而不是Windows Media Format 11 SDK。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]

套用這種保護時,會產生 DRM 第 1 版授權,該授權只在發出授權要求的電腦上有效。 由於未設定任何金鑰或金鑰種子,因此無法為使用此技術保護的內容產生可攜式授權。 不過,使用 Windows 媒體格式 SDK 7.1 或更新版本時,授權可在 Microsoft 授權移轉服務上復原。

若要使用 DRM 第 1 版保護 ASF 檔案,請執行下列步驟:

  1. 將 WMStubDRM.lib 檔案連結至您的專案,並視需要取消連結 wmvcore.lib。

  2. 呼叫 WMCreateWriter 函 式以建立寫入器。 第一個引數是保留的,而且必須設定為 Null

  3. 呼叫 IWMWriter::SetProfileIWMWriter::SetProfileByID,為寫入器設定要使用的設定檔。 您必須在寫入器中設定設定檔,才能設定任何 DRM 屬性。 只有使用 Windows 媒體音訊或 Windows 媒體視訊編解碼器的設定檔才支援 DRM。

  4. 使用 IWMHeaderInfo::SetAttribute 方法,設定下列 DRM 屬性。 Use_DRM屬性會指示 DRM 元件使用 DRM 第 1 版來保護內容。 DRM_Flags屬性會指定要包含在將針對內容建立之本機授權中的許可權。 DRM_LEVEL值也會儲存在授權中;它會指定存取內容所需的最低層級。 150 是 DRM 第 1 版內容的建議層級。

    屬性
    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) );