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 sesión se usa para proteger la clave de contenido. El código siguiente muestra cómo crear una clave de sesión, pero deja los detalles de la generación aleatoria de claves.
HRESULT CreateSessionKey( WMDRM_IMPORT_SESSION_KEY **ppSessionKey, DWORD *pcbSessionKey )
{
// TODO: Set this value to the desired number of bytes for the session key data.
const DWORD SESSION_KEY_DATA_SIZE = 20;
HRESULT hr = S_OK;
WMDRM_IMPORT_SESSION_KEY *pSessionKey = NULL;
if( NULL == ppSessionKey )
{
hr = E_POINTER;
goto EXIT;
}
// Compute the size of the session key structure plus the session key.
DWORD cbSessionKey = sizeof( WMDRM_IMPORT_SESSION_KEY ) + SESSION_KEY_DATA_SIZE;
// Allocate memory for the session key.
pSessionKey = (WMDRM_IMPORT_SESSION_KEY *)new BYTE[ cbSessionKey ];
if( NULL == pSessionKey )
{
hr = E_OUTOFMEMORY;
goto EXIT;
}
ZeroMemory( pSessionKey, cbSessionKey );
// Set the key type and the key size.
pSessionKey->dwKeyType = WMDRM_KEYTYPE_RC4;
pSessionKey->cbKey = SESSION_KEY_DATA_SIZE;
// Set the key to a random value. Note that the random number
// generator is not very good. It is only intended to be demonstrative
// and it is not recommended for use in shipping code.
srand((unsigned int)time(NULL));
BYTE* pKeyData = pSessionKey->rgbKey;
for (size_t i = 0; i < SESSION_KEY_DATA_SIZE; ++i)
{
*pKeyData++ = (BYTE)(rand() & 0xFF);
}
// If all has been successful set the parameters.
*ppSessionKey = pSessionKey;
pSessionKey = NULL;
*pcbSessionKey = cbSessionKey;
EXIT:
SAFE_ARRAY_DELETE( pSessionKey );
return hr;
}
Temas relacionados