Funzione COPPKeyExchange
La funzione COPPKeyExchange di esempio recupera il certificato digitale usato dall'hardware grafico.
Sintassi
HRESULT COPPKeyExchange(
_In_ COPP_DeviceData pThis,
_Out_ GUID *pRandom,
_Out_ BYTE *pGHCertificate
);
Parametri
pThis [in]
- Puntatore all'oggetto dispositivo COPP DirectX VA.
pRandom [out]
- Puntatore a una variabile che riceve un numero casuale a 128 bit.
pGHCertificate [out]
- Puntatore a un elenco di byte che riceve il certificato hardware grafico.
Valore restituito
Restituisce zero (S_OK o DD_OK) in caso di esito positivo; in caso contrario, restituisce un codice di errore.
Commenti
Un dispositivo COPP DirectX VA deve fornire le dimensioni del certificato hardware grafico a VMR prima di ricevere una chiamata alla relativa funzione COPPKeyExchange. Vale a dire, la funzione COPPGetCertificateLength deve essere chiamata prima di COPPKeyExchange. Se COPPKeyExchange viene chiamato prima di COPPGetCertificateLength, COPPKeyExchange deve restituire E_UNEXPECTED.
Mapping di RenderMoComp a COPPKeyExchange
La funzione COPPKeyExchange di esempio esegue il mapping direttamente a una chiamata al membro RenderMoComp della struttura DD_MOTIONCOMPCALLBACKS. Il membro RenderMoComp punta alla funzione di callback DdMoCompRender fornita dal driver di visualizzazione che fa riferimento alla struttura DD_RENDERMOCOMPDATA.
La funzione di callback RenderMoComp viene chiamata senza che venga chiamata prima la funzione BeginMoCompFrame o EndMoCompFrame fornita dal driver di visualizzazione.
La struttura DD_RENDERMOCOMPDATA viene riempita nel modo seguente.
Membro | Valore |
---|---|
dwNumBuffers | Numero di buffer in lpBufferInfo. Il valore è uguale a 1. |
lpBufferInfo | Puntatore a una singola superficie di memoria di sistema RGB32 che contiene lo spazio necessario per contenere il certificato hardware. La lunghezza richiesta della superficie è stata restituita nella chiamata a COPPGetCertificateLength. Si noti che viene usata una superficie di memoria di sistema per restituire il certificato perché le dimensioni del certificato possono superare le dimensioni del buffer massimo passato tramite il parametro lpOutputData. |
dwFunction | DXVA_COPPKeyExchangeFnCode costante (definita in dxva.h). |
lpInputData | NULL |
lpOutputData | Puntatore a un numero casuale a 128 bit generato dal driver. |
Codice di esempio
Il codice seguente fornisce un esempio di come implementare la funzione 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;
}
Requisiti
Piattaforma di destinazione | Versione |
---|---|
Desktop | Questa funzione si applica solo a Windows Server 2003 con SP1 e versioni successive e Windows XP con SP2 e versioni successive. |
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per