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. |
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk