Fungsi COPPSequenceStart
Contoh fungsi COPPSequenceStart mengatur sesi video saat ini ke mode terlindungi.
Sintaks
HRESULT COPPSequenceStart(
_In_ COPP_DeviceData pThis,
_In_ DXVA_COPPSignature *pSeqStartInfo
);
Parameter
pThis [in]
- Arahkan ke objek perangkat COPP DirectX VA.
pSeqStartInfo [in]
- Memasok pointer ke struktur DXVA_COPPSignature yang berisi informasi tentang urutan mulai.
Mengembalikan nilai
Mengembalikan nol (S_OK atau DD_OK) jika berhasil; jika tidak, mengembalikan kode kesalahan.
Keterangan
Perangkat COPP DirectX VA harus menyediakan sertifikat perangkat keras grafis ke VMR sebelum menerima panggilan ke fungsi COPPSequenceStart-nya. Artinya, fungsi COPPKeyExchange harus dipanggil sebelum COPPSequenceStart. Jika COPPSequenceStart dipanggil sebelum COPPKeyExchange, COPPSequenceStart harus mengembalikan E_UNEXPECTED.
Setelah memberikan sertifikat perangkat keras grafis, perangkat COPP DirectX VA seharusnya hanya menerima satu panggilan ke fungsi COPPSequenceStart-nya. Jika perangkat COPP DirectX VA menerima panggilan COPPSequenceStart lain, perangkat harus mengembalikan E_UNEXPECTED.
Fungsi COPPSequenceStart menerima struktur DXVA_COPPSignature yang diisi yang berisi urutan awal, yang terdiri dari item berikut yang digabungkan bersama-sama:
- Angka acak 128-bit yang dihasilkan oleh driver dan dikembalikan melalui panggilan ke fungsi COPPKeyExchange driver
- Kunci sesi integritas data acak 128-bit
- Nomor urutan status awal acak 32-bit
- Nomor urutan perintah awal acak 32-bit
Urutan mulai dienkripsi dengan menggunakan kunci publik perangkat keras grafis.
Pemetaan RenderMoComp ke COPPSequenceStart
Sampel fungsi COPPSequenceStart 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 | Nol. |
lpBufferInfo | NULL. |
dwFunction | DXVA_COPPSequenceStartFnCode konstanta (didefinisikan dalam dxva.h). |
lpInputData | Penunjuk ke struktur DXVA_COPPSignature. |
lpOutputData | NULL. |
Contoh Kode
Kode berikut memberikan contoh bagaimana Anda dapat mengimplementasikan fungsi COPPSequenceStart Anda:
HRESULT
COPP_RSADecryptData(
const BYTE* lpPrivateKey,
DXVA_COPPSignature* pOutput,
DXVA_COPPSignature* pInput
)
{
DWORD dwLen = sizeof(DXVA_COPPSignature);
return RSADecPrivate(lpPrivateKey, (const BYTE *)pInput,
sizeof(DXVA_COPPSignature), (BYTE*) pOutput, &dwLen);
}
HRESULT
COPPSequenceStart(
COPP_DeviceData* pThis,
DXVA_COPPSignature* pSeqStartInfo
)
{
if (pThis->m_COPPDevState == COPP_KEY_EXCHANGED) {
BYTE* pByte;
DXVA_COPPSignature Decrypted;
GUID rGraphicsDriver;
HRESULT hr;
COPP_RSADecryptData(PrivateKey, &Decrypted, pSeqStartInfo);
pByte = (BYTE*)&Decrypted;
memcpy(&rGraphicsDriver, pByte, sizeof(DWORD));
pByte += sizeof(DWORD);
memcpy(&pThis->m_KDI, pByte, sizeof(GUID));
pByte += sizeof(GUID);
memcpy(&pThis->m_StatusSeqNumber, pByte, sizeof(DWORD));
pByte += sizeof(DWORD);
memcpy(&pThis->m_CmdSeqNumber, pByte, sizeof(DWORD));
pByte += sizeof(DWORD);
hr = SetKey(&pThis->m_AesHelper, (BYTE*)&pThis->m_KDI, sizeof(GUID));
if (hr != S_OK) {
return hr;
}
if (!IsEqualGUID(&rGraphicsDriver, &pThis->m_rGraphicsDriver)) {
return E_UNEXPECTED;
}
pThis->m_COPPDevState = COPP_SESSION_ACTIVE;
}
else {
return E_UNEXPECTED;
}
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