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


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

[Функция, связанная с этой страницей 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)