Initialisieren des DRM-Importbeispiels
[Das dieser Seite zugeordnete Feature Windows Media Format 11 SDK ist ein Legacyfeature. Es wurde von Source Reader und Sink Writer abgelöst. Source Reader und Sink Writer wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit quellleser und Senkenschreiber anstelle des Windows Media Format 11 SDK verwendet. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]
Im folgenden Codebeispiel wird veranschaulicht, wie ein DRM-Writer-Objekt für DEN DRM-Import initialisiert wird:
HRESULT InitializeImport( IWMDRMWriter3 *pDRMWriter )
{
// Set this value to the desired number of bytes in an encrypted
// session key.
const int MODULUS_SIZE = 32;
HRESULT hr = S_OK;
WMDRM_IMPORT_INIT_STRUCT ImportInit;
BYTE *pbEncryptedSessionKey = NULL;
DWORD cbEncryptedSessionKey = 0;
WMDRM_IMPORT_SESSION_KEY *pSessionKey = NULL;
DWORD cbSessionKey = 0;
WMDRM_IMPORT_CONTENT_KEY *pContentKey = NULL;
DWORD cbContentKey = 0;
// Allocate memory for the encrypted session key.
pbEncryptedSessionKey = new BYTE[ MODULUS_SIZE ];
if( NULL == pbEncryptedSessionKey )
{
hr = E_OUTOFMEMORY;
goto EXIT;
}
cbEncryptedSessionKey = MODULUS_SIZE;
hr = CreateSessionKey( &pSessionKey, &cbSessionKey );
if( FAILED( hr ) ) goto EXIT;
if( cbSessionKey > MODULUS_SIZE )
if( FAILED( hr ) ) goto EXIT;
hr = CreateContentKey( &pContentKey, &cbContentKey );
if( FAILED( hr ) ) goto EXIT;
// TODO: Encrypt the content key with the session Key.
// TODO: Encrypt the session key with the machine certificate public key.
ImportInit.dwVersion = 0;
ImportInit.pbEncryptedSessionKeyMessage = pbEncryptedSessionKey;
ImportInit.cbEncryptedSessionKeyMessage = cbEncryptedSessionKey;
ImportInit.pbEncryptedKeyMessage = (BYTE*)pContentKey;
ImportInit.cbEncryptedKeyMessage = cbContentKey;
hr = pDRMWriter->SetProtectStreamSamples( &ImportInit );
if( FAILED( hr ) ) goto EXIT;
EXIT:
SAFE_ARRAY_DELETE( pContentKey );
SAFE_ARRAY_DELETE( pSessionKey );
return( hr );
}
Zugehörige Themen