Condividi tramite


Protezione dei file con DRM versione 1

[La funzionalità associata a questa pagina, Windows Media Format 11 SDK, è una funzionalità legacy. È stata sostituita da Lettore di origine e Writer sink. Lettore di origine e Writer sink sono stati ottimizzati per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi Lettore di origine e Writer sink anziché Windows Media Format 11 SDK, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Quando viene applicata questa tipologia di protezione, viene generata una licenza DRM versione 1 valida solo nel computer da cui è stata effettuata la richiesta di licenza. Poiché non è impostato alcun valore di inizializzazione chiave o chiave, non è possibile generare licenze portabili per il contenuto protetto usando questa tecnica. Tuttavia, quando si usa Windows Media Format SDK 7.1 o versione successiva, le licenze sono recuperabili nel servizio Migrazione licenze Microsoft.

Per proteggere i file ASF usando DRM versione 1, seguire questa procedura:

  1. Collegare il file WMStubDRM.lib al progetto e, se necessario, scollegare il file wmvcore.lib.

  2. Chiamare la funzione WMCreateWriter per creare il writer. Il primo argomento è riservato e deve essere impostato su NULL.

  3. Impostare un profilo per il writer da usare chiamando IWMWriter::SetProfile o IWMWriter::SetProfileByID. È necessario impostare un profilo nel writer prima di impostare eventuali attributi DRM. DRM è supportato solo per i profili che usano i codec Windows Media Audio o Windows Media Video.

  4. Usando il metodo IWMHeaderInfo::SetAttribute , impostare le proprietà DRM seguenti. La proprietà Use_DRM indica ai componenti DRM di proteggere il contenuto usando DRM versione 1. La proprietà DRM_Flags specifica i diritti da includere nella licenza locale che verrà creata per il contenuto. Il valore DRM_LEVEL viene archiviato anche nella licenza; specifica il livello minimo necessario per accedere al contenuto. 150 è il livello consigliato per il contenuto DRM versione 1.

    Attributo Valore
    Use_DRM TRUE
    DRM_Flags WMT_RIGHT_PLAYBACK | WMT_RIGHT_COPY_TO_NON_SDMI_DEVICE | WMT_RIGHT_COPY_TO_CD
    DRM_LEVEL 150

     

Nel codice di esempio seguente viene illustrato come creare un writer abilitato per DRM versione 1 e impostare le proprietà DRM. Il controllo degli errori è stato omesso per il fine di chiarire.

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