使用 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 檔案,請執行下列步驟:
將 WMStubDRM.lib 檔案連結至您的專案,並視需要取消連結 wmvcore.lib。
呼叫 WMCreateWriter 函 式以建立寫入器。 第一個引數是保留的,而且必須設定為 Null。
呼叫 IWMWriter::SetProfile 或 IWMWriter::SetProfileByID,為寫入器設定要使用的設定檔。 您必須在寫入器中設定設定檔,才能設定任何 DRM 屬性。 只有使用 Windows 媒體音訊或 Windows 媒體視訊編解碼器的設定檔才支援 DRM。
使用 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) );