Поделиться через


Получение цепочки сертификатов для драйверов

[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи аудио и видеозахват в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код MediaPlayer, IMFMediaEngine и аудио-видеозахват в Media Foundation вместо DirectShowпо возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]

Чтобы использовать сертифицированный протокол защиты выходных данных (COPP), приложение сначала должно создать граф DirectShow, включающий фильтр визуализации видеосмешивания (VMR-7 или VMR-9). Старый фильтр отрисовщика видео не поддерживает COPP. Перед вызовом методов COPP приложение должно создать граф воспроизведения видео и подключить декодировщик к входной пин-коду фильтра VMR. Воспроизведение видеофайла не требуется.

После создания графа обратитесь к VMR для интерфейса IAMCertifiedOutputProtection, а затем вызовите IAMCertifiedOutputProtection::KeyExchange. Этот метод возвращает 128-разрядное случайное число, типизированное в виде GUID, а также указатель на массив байтов, содержащий цепочку XML-сертификатов драйвера в формате UTF-8. В следующем коде показано, как получить цепочку сертификатов.

GUID guidRandom;
BYTE *pbCertificateChain = NULL;
DWORD cbCertificateChainLen;   // Size of the certificate chain, in bytes.
hr = pCOPP->KeyExchange(&guidRandom, &pbCertificateChain,
         &cbCertificateChainLen);
if (SUCCEEDED(hr))
{
    // TODO: Validate the certificate chain and get the driver's
    // public key. 

    // When you are done, free the buffer that contains the 
    // certificate chain.
    CoTaskMemFree(pbCertificateChain);
}

Использование сертифицированного протокола защиты выходных данных (COPP)