Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
[La característica asociada a esta página, SDK de Windows Media Format 11, es una característica heredada. Se ha reemplazado por lector de origen y receptor escritor. lector de origen y receptor escritor se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use lector de origen y escritor receptor en lugar de SDK de Windows Media Format 11, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.
La clave de contenido se usa para cifrar ejemplos multimedia para la importación de DRM de Windows Media. En el ejemplo de código siguiente se muestra cómo crear e inicializar una estructura de clave de contenido.
HRESULT CreateContentKey( WMDRM_IMPORT_CONTENT_KEY **ppContentKey, DWORD *pcbContentKey)
{
// TODO: Set this value to the desired number of bytes for the content key data.
const DWORD IV_DATA_SIZE = 16;
HRESULT hr = S_OK;
WMDRM_IMPORT_CONTENT_KEY *pContentKey = NULL;
// The content key.
const BYTE rgbContentKey[] = {
0x67, 0x39, 0x83, 0xb9,
0x52, 0xa8, 0xe3
};
const DWORD CONTENT_KEY_DATA_SIZE = sizeof(rgbContentKey);
// Compute the total size of the content key structure
DWORD cbContentKey = sizeof( WMDRM_IMPORT_CONTENT_KEY ) +
IV_DATA_SIZE + CONTENT_KEY_DATA_SIZE;
// Make sure we have a valid
if( NULL == ppContentKey )
{
hr = E_POINTER;
goto EXIT;
}
// Allocate the content key, locally first
pContentKey = (WMDRM_IMPORT_CONTENT_KEY *)new BYTE[ cbContentKey ];
// Check the allocation was successful
if( NULL == pContentKey )
{
hr = E_OUTOFMEMORY;
goto EXIT;
}
// Ininitalize the key
ZeroMemory( pContentKey, cbContentKey );
pContentKey->dwVersion = 0;
pContentKey->cbStructSize = cbContentKey;
// Set the initialization vector key type
pContentKey->dwIVKeyType = WMDRM_KEYTYPE_RC4;
pContentKey->cbIVKey = IV_DATA_SIZE;
// Generate a random initialization vector. Note that this random number
// generator is not very good. It is only intended to be demonstrative
// and it is not recommended for use in commercial strength code.
srand((unsigned int)time(NULL));
BYTE* pKeyData = pContentKey->rgbKeyData;
for (size_t i = 0; i < IV_DATA_SIZE; ++i)
{
*pKeyData++ = (BYTE)(rand() & 0xFF);
}
// Set the content key type.
pContentKey->dwContentKeyType = WMDRM_KEYTYPE_COCKTAIL;
pContentKey->cbContentKey = CONTENT_KEY_DATA_SIZE;
// Fill out the content key.
for (size_t i = 0; i < CONTENT_KEY_DATA_SIZE; ++i)
{
*pKeyData++ = rgbContentKey[i];
}
// If all has been successful, set the parameters
*ppContentKey = pContentKey;
pContentKey = NULL;
*pcbContentKey = cbContentKey;
EXIT:
SAFE_ARRAY_DELETE( pContentKey );
return hr;
}
Temas relacionados