Udostępnij za pośrednictwem


Ochrona plików za pomocą narzędzia DRM w wersji 1

[Funkcja skojarzona z tą stroną, windows Media Format 11 SDK, jest starszą funkcją. Został zastąpiony przez Source Reader oraz Sink Writer. Source Reader i Sink Writer zostały zoptymalizowane pod kątem Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał czytnika źródeł i zapisującego ujścia zamiast zestawu SDK Windows Media Format 11, jeśli jest to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]

Po zastosowaniu tego rodzaju ochrony jest generowana licencja DRM w wersji 1, która jest ważna tylko na maszynie, z której zostało wykonane żądanie licencji. Ponieważ nie ustawiono klucza lub klucza źródłowego, nie ma możliwości generowania przenośnych licencji na zawartość chronioną przy użyciu tej techniki. Jednak w przypadku korzystania z zestawu Windows Media Format SDK 7.1 lub nowszego licencje można odzyskać w usłudze Microsoft License Migration Service.

Aby chronić pliki ASF przy użyciu drM w wersji 1, wykonaj następujące kroki:

  1. Połącz plik WMStubDRM.lib ze swoim projektem, a w razie potrzeby odłącz wmvcore.lib.

  2. Wywołaj funkcję WMCreateWriter, aby utworzyć writer. Pierwszy argument jest zarezerwowany i musi być ustawiony na wartość null.

  3. Ustaw profil dla zapisywarki do użycia poprzez wywołanie IWMWriter::SetProfile lub IWMWriter::SetProfileByID. Przed ustawieniem atrybutów DRM należy ustawić profil w edytorze. DrM jest obsługiwana tylko w przypadku profilów korzystających z koderów audio systemu Windows Media lub Windows Media Video.

  4. Używając metody IWMHeaderInfo::SetAttribute, ustaw następujące właściwości DRM. Właściwość Use_DRM daje instrukcję składnikom DRM, aby chroniły zawartość, używając wersji 1 DRM. Właściwość DRM_Flags określa prawa, które mają zostać uwzględnione w lokalnej licencji, która zostanie utworzona dla zawartości. Wartość DRM_LEVEL jest również przechowywana w licencji; określa minimalny poziom wymagany do uzyskania dostępu do zawartości. 150 jest zalecanym poziomem zawartości DRM w wersji 1.

    Atrybut Wartość
    Użyj_DRM prawda
    DRM_Flags WMT_RIGHT_PLAYBACK | WMT_RIGHT_COPY_TO_NON_SDMI_DEVICE | WMT_RIGHT_COPY_TO_CD
    DRM_LEVEL 150

     

Poniższy przykładowy kod pokazuje, jak utworzyć writer z obsługą DRM dla DRM w wersji 1 i ustawić właściwości DRM. Sprawdzanie błędów zostało pominięte ze względu na wyjaśnienie.

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