メディアサンプル暗号化の例
[このページに関連付けられている機能である Windows Media Format 11 SDK は、従来の機能です。 ソース リーダーとシンク ライターに置き換わりました。 ソース リーダーとシンク ライターは、Windows 10とWindows 11用に最適化されています。 Microsoft では、可能であれば、新しいコードで Windows Media Format 11 SDK ではなくソース リーダーとシンク ライターを使用することを強くお勧めします。 Microsoft は、レガシ 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;
}
関連トピック