Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
[A funcionalidade associada a esta página, Windows Media Format 11 SDK, é uma funcionalidade herdada. Foi substituído por Source Reader e Sink Writer. do Source Reader e Sink Writer foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda vivamente que o novo código utilize do Leitor de Origem e do Gravador de Separadores em vez de SDK do Windows Media Format 11, sempre que possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]
A chave de sessão é usada para proteger a chave de conteúdo. O código a seguir demonstra como criar uma chave de sessão, mas deixa de fora os detalhes da geração de chaves aleatórias.
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;
}
Tópicos relacionados