Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
[O recurso associado a esta página, do SDK do Windows Media Format 11, é um recurso herdado. Foi substituído por de Leitor de Origem e do Gravador do Coletor de. de Leitor de Origem e Gravador do Coletor foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use de Leitor de Origem e o Gravador do Coletor em vez de do SDK do Windows Media Format 11, quando 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 chave aleatória.
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