Condividi tramite


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.