Freigeben über


Schützen von Dateien mit DRM Version 1

[Das dieser Seite zugeordnete Feature Windows Media Format 11 SDK ist ein Legacyfeature. Sie wurde durch den Quellleser und den Senkenschreiber ersetzt. Quellleser und Senkenschreiber wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit den Quellleser und senkenden Writer anstelle des Windows Media Format 11 SDK verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]

Wenn dieser Schutz angewendet wird, wird eine DRM-Lizenz der Version 1 generiert, die nur auf dem Computer gültig ist, von dem aus die Lizenzanforderung erfolgt ist. Da kein Schlüssel- oder Schlüsselsamen festgelegt ist, gibt es keine Möglichkeit, portable Lizenzen für mit diesem Verfahren geschützte Inhalte zu generieren. Bei Verwendung des Windows Media Format SDK 7.1 oder höher können die Lizenzen jedoch beim Microsoft-Lizenzmigrationsdienst wiederhergestellt werden.

Führen Sie zum Schützen von ASF-Dateien mit DRM Version 1 die folgenden Schritte aus:

  1. Verknüpfen Sie die Datei WMStubDRM.lib mit Ihrem Projekt, und heben Sie bei Bedarf die Verknüpfung von wmvcore.lib auf.

  2. Rufen Sie die WMCreateWriter-Funktion auf, um den Writer zu erstellen. Das erste Argument ist reserviert und muss auf NULL festgelegt werden.

  3. Legen Sie ein Profil fest, das der Writer verwenden soll, indem Sie IWMWriter::SetProfile oder IWMWriter::SetProfileByID aufrufen. Sie müssen ein Profil im Writer festlegen, bevor Sie DRM-Attribute festlegen. DRM wird nur für Profile unterstützt, die die Codecs Windows Media Audio oder Windows Media Video verwenden.

  4. Legen Sie mithilfe der IWMHeaderInfo::SetAttribute-Methode die folgenden DRM-Eigenschaften fest. Die Use_DRM-Eigenschaft weist die DRM-Komponenten an, den Inhalt mithilfe von DRM Version 1 zu schützen. Die DRM_Flags-Eigenschaft gibt die Rechte an, die in der lokalen Lizenz enthalten sein sollen, die für den Inhalt erstellt wird. Der DRM_LEVEL Wert wird auch in der Lizenz gespeichert. Es gibt die Mindestebene an, die für den Zugriff auf den Inhalt erforderlich ist. 150 ist die empfohlene Ebene für DRM-Inhalte, Version 1.

    attribute Wert
    Use_DRM TRUE
    DRM_Flags WMT_RIGHT_PLAYBACK | WMT_RIGHT_COPY_TO_NON_SDMI_DEVICE | WMT_RIGHT_COPY_TO_CD
    DRM_LEVEL 150

     

Der folgende Beispielcode zeigt, wie Sie einen DRM-fähigen Writer für DRM Version 1 erstellen und die DRM-Eigenschaften festlegen. Die Fehlerüberprüfung wurde aus Gründen der Klarstellung weggelassen.

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