Использование DDI OPM
Подсистема ядра графики Microsoft DirectX (Dxgkrnl.sys) использует DDI OPM для создания защищенных выходных данных OPM, уничтожения защищенных выходных данных OPM, получения сертификатов, настройки защищенных выходных данных, получения сведений о защищенных выходных данных и получения сведений о графическом адаптере. Подсистема ядра графики DirectX получает указатели на функции DDI OPM при вызове функции dxgkDdiQueryInterface драйвера дисплея dxgkDdiQueryInterface для запроса интерфейса, определяемого GUID_DEVINTERFACE_OPM и DXGK_OPM_INTERFACE_VERSION_1. В следующей последовательности описывается, как DDI OPM обычно используется для создания, управления и уничтожения защищенных выходных данных OPM:
Подсистема графического ядра DirectX вызывает функцию DxgkDdiOPMCreateProtectedOutput для создания защищенного вывода OPM. Защищенные выходные данные OPM всегда соответствуют одному физическому выводу видео. DxgkDdiOPMCreateProtectedOutput возвращает дескриптор только что созданному выходу.
Подсистема ядра графики DirectX вызывает функции DXgkDdiOPMGetCertificateSize и DxgkDdiOPMGetCertificate, чтобы получить сертификат OPM драйвера минипорта дисплея или сертификат COPP и его размер.
Примечание.
DxgkDdiOPMCreateProtectedOutput, DxgkDdiOPMGetCertificateSize и DxgkDdiOPMGetCertificate являются единственными функциями DDI OPM, в которые подсистема графического ядра DirectX не передает защищенный дескриптор выходных данных.
Подсистема ядра графики DirectX вызывает функцию DxgkDdiOPMGetRandomNumber , чтобы получить случайное число защищенного вывода.
Подсистема графического ядра DirectX передает буфер 256-байтов в вызове функции DxgkDdiOPMSetSigningKeyAndSequenceNumbers . Буфер содержит данные, зашифрованные одним из открытых ключей драйвера мини-порта. Дополнительные сведения о открытых ключах можно скачать на веб-сайте "Защита содержимого вывода" и на веб-сайте Windows Vista . Открытый ключ, используемый, зависит от семантики защищенных выходных данных. Открытый ключ в сертификате OPM драйвера мини-порта отображения используется, если защищенные выходные данные имеют семантику OPM. Открытый ключ в сертификате COPP драйвера мини-порта отображения используется, если защищенные выходные данные имеют семантику COPP. Схема шифрования, используемая для шифрования данных, также зависит от семантики защищенного вывода. Данные шифруются с помощью стандартного алгоритма RSA, если защищенные выходные данные имеют семантику COPP и с помощью схемы шифрования RSAES-OAEP, если защищенные выходные данные имеют семантику OPM. Сведения о RSA, AES и RSAES-OAEP см. на веб-сайте RSA Laboratories . Драйвер мини-порта отображения использует соответствующий закрытый ключ и метод расшифровки данных. Случайное число, два случайных номера последовательности и 128-разрядный ключ AES находятся в расшифрованных данных. Диск минипорта отображения гарантирует, что случайное число соответствует случайному числу, возвращаемого драйвером при вызове функции DxgkDdiOPMGetRandomNumber. Затем драйвер сохраняет два номера последовательности и 128-разрядный ключ AES.
Подсистема ядра графики DirectX теперь может вызывать функцию DxgkDdiOPMGetInformation или DXgkDdiOPMGetCOPPCompatibleInformation, чтобы получить информацию из защищенного вывода. Подсистема ядра графики DirectX также может вызывать DxgkDdiOPMConfigureProtectedOutput , чтобы настроить защищенные выходные данные. DxgkDdiOPMGetInformation можно вызывать только в том случае, если выходные данные имеют семантику OPM и DxgkDdiOPMGetCOPPCompatibleInformation можно вызывать только в том случае, если выходные данные имеют семантику COPP. Как правило, подсистема ядра графики DirectX вызывает DxgkDdiOPMGetInformation или DxgkDdiOPMGetCOPPCompatibleInformation, чтобы получить сведения о выходных данных, а затем вызывает DxgkDdiOPMConfigureProtectedOutput один или несколько раз, чтобы настроить выходные данные. Затем подсистема ядра графики DirectX снова вызывает DxgkDdiOPMGetInformation или DxgkDdiOPMGetCOPPCompatibleInformation . Подсистема ядра графики DirectX может получить следующие типы информации, вызвав DxgkDdiOPMGetInformation или DxgkDdiOPMGetCOPPCompatibleInformation:
- Тип соединителя выходных данных.
- Типы защиты содержимого, поддерживаемые выходными данными. Выходные данные могут поддерживаться в настоящее время:
- Аналоговая защита копирования (ACP)
- Аналоговая система управления содержимым (CGMS-A)
- Защита цифрового содержимого с высокой пропускной способностью (HDCP)
- DisplayPort Content Protection (DPCP)
- Текущий уровень виртуальной защиты выходных данных для определенного типа защиты.
- Фактический уровень защиты физического выходных данных для определенного типа защиты.
- Версия сообщения о продлении системы HDCP (SRM), используемого в данный момент выходными данными. Дополнительные сведения о HDCP SRM см. в спецификации HDCP версии 1.1. Эти сведения могут получить только DxgkDdiOPMGetInformation.
- Вектор выбора ключей (KSV) подключенного устройства HDCP и является ли устройство HDCP повторителем. Эти сведения могут получить только DxgkDdiOPMGetCOPPCompatibleInformation. Дополнительные сведения о ретрансляторах HDCP и KSV см. в спецификации HDCP версии 1.1.
- Тип шины расширения, используемой графическим адаптером. PCI и AGP являются примерами автобусов расширения.
- Формат изображений, отправляемых из физического соединителя, связанного с защищенными выходными данными монитора.
- Стандарты CGMS-A и ACP, которые поддерживают защищенные выходные данные. Эти сведения могут получить только DxgkDdiOPMGetCOPPCompatibleInformation.
- Идентификатор выходных данных.
- Электрические характеристики выходного соединителя цифрового видеоконнектора (DVI).
Подсистема ядра графики DirectX может изменить следующие параметры, вызвав DxgkDdiOPMConfigureProtectedOutput:
- Текущий уровень защиты одного из типов защиты выходных данных. Например, DxgkDdiOPMConfigureProtectedOutput может включить или отключить HDCP и отключить защиту ACP или изменить текущий уровень защиты ACP.
- Текущий SRM HDCP, который использует защищенные выходные данные.
- Текущий стандарт сигнала о том, что защищенные выходные данные используются. Это изменение можно сделать только в том случае, если выходные данные имеют семантику COPP.
Подсистема ядра графики DirectX вызывает DxgkDdiOPMDeprotectedOutput после завершения работы с защищенным выходным объектом.