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:
Połącz plik WMStubDRM.lib ze swoim projektem, a w razie potrzeby odłącz wmvcore.lib.
Wywołaj funkcję WMCreateWriter, aby utworzyć writer. Pierwszy argument jest zarezerwowany i musi być ustawiony na wartość null.
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.
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) );