Fonction COPPKeyExchange
L’exemple de fonction COPPKeyExchange récupère le certificat numérique utilisé par le matériel graphique.
Syntaxe
HRESULT COPPKeyExchange(
_In_ COPP_DeviceData pThis,
_Out_ GUID *pRandom,
_Out_ BYTE *pGHCertificate
);
Paramètres
pThis [in]
- Pointeur vers l’objet d’appareil COPP DirectX VA.
pRandom [out]
- Pointeur vers une variable qui reçoit un nombre aléatoire 128 bits.
pGHCertificate [out]
- Pointeur vers une liste d’octets qui reçoit le certificat matériel graphique.
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 la taille du certificat matériel graphique au VMR avant de recevoir un appel à sa fonction COPPKeyExchange. Autrement dit, la fonction COPPGetCertificateLength doit être appelée avant COPPKeyExchange. Si COPPKeyExchange est appelé avant COPPGetCertificateLength, COPPKeyExchange doit retourner E_UNEXPECTED.
Mappage de RenderMoComp à COPPKeyExchange
L’exemple de fonction COPPKeyExchange correspond 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 | Nombre de mémoires tampons sur lpBufferInfo. La valeur est égale à 1. |
lpBufferInfo | Pointeur vers une seule surface de mémoire système RGB32 qui contient l’espace nécessaire pour contenir le certificat matériel. La longueur requise de la surface a été retournée dans l’appel à COPPGetCertificateLength. Notez qu’une surface de mémoire système est utilisée pour renvoyer le certificat, car la taille du certificat peut dépasser la taille de la mémoire tampon maximale passée via le paramètre lpOutputData. |
dwFunction | DXVA_COPPKeyExchangeFnCode constante (définie dans dxva.h). |
lpInputData | NULL. |
lpOutputData | Pointeur vers un nombre aléatoire 128 bits généré par le pilote. |
Exemple de code
Le code suivant fournit un exemple de la façon dont vous pouvez implémenter votre fonction COPPKeyExchange :
DWORD
COPP_Generate128BitRandomNumber()
{
GUID RandNum;
DWORD* pdw = (DWORD*)&RandNum;
pdw[0] = rand();
pdw[1] = rand();
pdw[2] = rand();
pdw[3] = rand();
return RandNum;
}
HRESULT
COPPKeyExchange(
COPP_DeviceData* pThis,
GUID* pRandNumber,
BYTE* pGHCertificate
)
{
if (pThis->m_COPPDevState != COPP_CERT_LENGTH_RETURNED) {
return E_UNEXPECTED;
}
memcpy(pGHCertificate, (LPVOID)&TestCert, sizeof(TestCert));
pThis->m_rGraphicsDriver = *pRandNumber = COPP_Generate128BitRandomNumber();
pThis->m_COPPDevState = COPP_KEY_EXCHANGED;
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