Bagikan melalui


Fungsi COPPKeyExchange

Contoh fungsi COPPKeyExchange mengambil sertifikat digital yang digunakan oleh perangkat keras grafis.

Sintaks

HRESULT COPPKeyExchange(
  _In_  COPP_DeviceData pThis,
  _Out_ GUID            *pRandom,
  _Out_ BYTE            *pGHCertificate
);

Parameter

pThis [in]

  • Arahkan ke objek perangkat COPP DirectX VA.

pRandom [keluar]

  • Pointer ke variabel yang menerima angka acak 128-bit.

pGHCertificate [out]

  • Penunjuk ke daftar byte yang menerima sertifikat perangkat keras grafis.

Mengembalikan nilai

Mengembalikan nol (S_OK atau DD_OK) jika berhasil; jika tidak, mengembalikan kode kesalahan.

Keterangan

Perangkat COPP DirectX VA harus menyediakan ukuran sertifikat perangkat keras grafis ke VMR sebelum menerima panggilan ke fungsi COPPKeyExchange-nya. Artinya, fungsi COPPGetCertificateLength harus dipanggil sebelum COPPKeyExchange. Jika COPPKeyExchange dipanggil sebelum COPPGetCertificateLength, COPPKeyExchange harus mengembalikan E_UNEXPECTED.

Pemetaan RenderMoComp ke COPPKeyExchange

Sampel fungsi COPPKeyExchange memetakan langsung ke panggilan ke anggota RenderMoComp dari struktur DD_MOTIONCOMPCALLBACKS. Anggota RenderMoComp menunjuk ke fungsi panggilan balik DdMoCompRender yang disediakan driver tampilan yang mereferensikan struktur DD_RENDERMOCOMPDATA.

Fungsi panggilan balik RenderMoComp dipanggil tanpa fungsi BeginMoCompFrame atau EndMoCompFrame yang disediakan driver tampilan dipanggil terlebih dahulu.

Struktur DD_RENDERMOCOMPDATA diisi sebagai berikut.

Anggota Nilai
dwNumBuffers Jumlah buffer di lpBufferInfo. Nilainya adalah 1.
lpBufferInfo Arahkan ke satu permukaan memori sistem RGB32 yang berisi ruang yang diperlukan untuk menyimpan sertifikat perangkat keras. Panjang permukaan yang diperlukan dikembalikan dalam panggilan ke COPPGetCertificateLength.
Perhatikan bahwa permukaan memori sistem digunakan untuk mengembalikan sertifikat karena ukuran sertifikat dapat melebihi ukuran buffer maksimum yang diteruskan melalui parameter lpOutputData.
dwFunction DXVA_COPPKeyExchangeFnCode konstanta (didefinisikan dalam dxva.h).
lpInputData NULL.
lpOutputData Pointer ke angka acak 128-bit yang dihasilkan oleh driver.

Contoh Kode

Kode berikut memberikan contoh bagaimana Anda dapat mengimplementasikan fungsi COPPKeyExchange Anda:

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;
}

Persyaratan

Platform target Versi
Desktop Fungsi ini hanya berlaku untuk Windows Server 2003 dengan SP1 dan yang lebih baru, dan Windows XP dengan SP2 dan yang lebih baru.