Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
[Funktionen som är associerad med den här sidan, Windows Media Format 11 SDK, är en äldre funktion. Det har ersatts av Source Reader och Sink Writer. Source Reader och Sink Writer har optimerats för Windows 10 och Windows 11. Microsoft rekommenderar starkt att ny kod använder Source Reader och Sink Writer i stället för Windows Media Format 11 SDK, när det är möjligt. Microsoft föreslår att befintlig kod som använder äldre API:er skrivs om för att använda de nya API:erna om möjligt.]
Sessionsnyckeln används för att skydda innehållsnyckeln. Följande kod visar hur du skapar en sessionsnyckel, men utelämnar information om slumpmässig nyckelgenerering.
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;
}
Relaterade ämnen