Пример шифрования образца мультимедиа
[Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей возможностью. Они были заменены на средства, читающие из источника и средства, записывающие в приемник. модуль чтения источника и модуль записи приемника оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует в новом коде использовать средства чтения источника и записывающее устройство вместо пакета SDK для Windows Media 11, когда это возможно. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
В следующем неполном примере показано, как зашифровать образец носителя с помощью шифрования DRM. Алгоритм шифрования RC4 не был оставлен из примера из-за ограничений пространства.
QWORD GetNextSalt(QWORD qwSalt)
{
return InterlockedIncrement64( (volatile LONGLONG*)&qwSalt );
}
HRESULT EncryptSample( INSSBuffer *pSample )
{
HRESULT hr = S_OK;
INSSBuffer3 *pNSSBuffer3 = NULL;
QWORD qwSalt = 0;
BYTE *pbData = NULL;
DWORD cbData = 0;
hr = pSample->QueryInterface( IID_INSSBuffer3, (void**)&pNSSBuffer3 );
if( FAILED( hr ) ) goto EXIT;
hr = pSample->GetBufferAndLength( &pbData, &cbData );
if( FAILED( hr ) ) goto EXIT;
qwSalt = GetNextSalt(qwSalt);
// TODO: Encrypt the sample by concatenating the initialization vector
// and using RC4 encryption.
hr = pNSSBuffer3->SetProperty(
WM_SampleExtensionGUID_SampleProtectionSalt,
&qwSalt, sizeof( qwSalt ) );
if( FAILED( hr ) ) goto EXIT;
EXIT:
SAFE_RELEASE( pNSSBuffer3 );
return hr;
}
Связанные разделы