Fonction COPPSequenceStart
L’exemple de fonction COPPSequenceStart définit la session vidéo active en mode protégé.
Syntaxe
HRESULT COPPSequenceStart(
_In_ COPP_DeviceData pThis,
_In_ DXVA_COPPSignature *pSeqStartInfo
);
Paramètres
pThis [in]
- Pointeur vers l’objet d’appareil COPP DirectX VA.
pSeqStartInfo [in]
- Fournit un pointeur vers une structure DXVA_COPPSignature qui contient des informations sur la séquence de début.
Valeur retournée
Retourne zéro (S_OK ou DD_OK) en cas de réussite ; sinon, retourne un code d’erreur.
Remarques
Un appareil COPP DirectX VA doit fournir le certificat matériel graphique au VMR avant de recevoir un appel à sa fonction COPPSequenceStart. Autrement dit, la fonction COPPKeyExchange doit être appelée avant COPPSequenceStart. Si COPPSequenceStart est appelé avant COPPKeyExchange, COPPSequenceStart doit retourner E_UNEXPECTED.
Après avoir fourni le certificat matériel graphique, l’appareil COPP DirectX VA ne doit recevoir qu’un seul appel à sa fonction COPPSequenceStart. Si l’appareil COPP DirectX VA reçoit un autre appel COPPSequenceStart, il doit retourner E_UNEXPECTED.
La fonction COPPSequenceStart reçoit une structure de DXVA_COPPSignature remplie qui contient une séquence de début, qui se compose des éléments suivants concaténés ensemble :
- Nombre aléatoire 128 bits généré par le pilote et retourné via un appel à la fonction COPPKeyExchange du pilote
- Clé de session d’intégrité des données aléatoires 128 bits
- Numéro de séquence de départ aléatoire 32 bits status
- Numéro de séquence de la commande de démarrage aléatoire 32 bits
La séquence de démarrage est chiffrée à l’aide de la clé publique du matériel graphique.
Mappage de RenderMoComp à COPPSequenceStart
L’exemple de fonction COPPSequenceStart est mappé directement à un appel au membre RenderMoComp de la structure DD_MOTIONCOMPCALLBACKS. Le membre RenderMoComp pointe vers la fonction de rappel DdMoCompRender fournie par le pilote d’affichage qui référence la structure DD_RENDERMOCOMPDATA.
La fonction de rappel RenderMoComp est appelée sans que la fonction BeginMoCompFrame ou EndMoCompFrame fournie par le pilote d’affichage soit appelée en premier.
La structure DD_RENDERMOCOMPDATA est remplie comme suit.
Membre | Valeur |
---|---|
dwNumBuffers | Zéro. |
lpBufferInfo | NULL. |
dwFunction | DXVA_COPPSequenceStartFnCode constante (définie dans dxva.h). |
lpInputData | Pointeur vers une structure DXVA_COPPSignature. |
lpOutputData | NULL. |
Exemple de code
Le code suivant fournit un exemple de la façon dont vous pouvez implémenter votre fonction COPPSequenceStart :
HRESULT
COPP_RSADecryptData(
const BYTE* lpPrivateKey,
DXVA_COPPSignature* pOutput,
DXVA_COPPSignature* pInput
)
{
DWORD dwLen = sizeof(DXVA_COPPSignature);
return RSADecPrivate(lpPrivateKey, (const BYTE *)pInput,
sizeof(DXVA_COPPSignature), (BYTE*) pOutput, &dwLen);
}
HRESULT
COPPSequenceStart(
COPP_DeviceData* pThis,
DXVA_COPPSignature* pSeqStartInfo
)
{
if (pThis->m_COPPDevState == COPP_KEY_EXCHANGED) {
BYTE* pByte;
DXVA_COPPSignature Decrypted;
GUID rGraphicsDriver;
HRESULT hr;
COPP_RSADecryptData(PrivateKey, &Decrypted, pSeqStartInfo);
pByte = (BYTE*)&Decrypted;
memcpy(&rGraphicsDriver, pByte, sizeof(DWORD));
pByte += sizeof(DWORD);
memcpy(&pThis->m_KDI, pByte, sizeof(GUID));
pByte += sizeof(GUID);
memcpy(&pThis->m_StatusSeqNumber, pByte, sizeof(DWORD));
pByte += sizeof(DWORD);
memcpy(&pThis->m_CmdSeqNumber, pByte, sizeof(DWORD));
pByte += sizeof(DWORD);
hr = SetKey(&pThis->m_AesHelper, (BYTE*)&pThis->m_KDI, sizeof(GUID));
if (hr != S_OK) {
return hr;
}
if (!IsEqualGUID(&rGraphicsDriver, &pThis->m_rGraphicsDriver)) {
return E_UNEXPECTED;
}
pThis->m_COPPDevState = COPP_SESSION_ACTIVE;
}
else {
return E_UNEXPECTED;
}
return NO_ERROR;
}
Configuration requise
Plateforme cible | Version |
---|---|
Desktop (Expérience utilisateur) | Cette fonction s’applique uniquement à Windows Server 2003 avec SP1 et versions ultérieures, et à Windows XP avec SP2 et versions ultérieures. |
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour