DDI защиты содержимого

Этот раздел относится только к Windows 7 и более поздних версий, а также Windows Server 2008 R2 и более поздних версий операционной системы Windows.

DDI защиты содержимого — это расширение Direct3D версии 9 DDI для защиты видео. DDI защиты содержимого состоит из точек входа, описанных в этом разделе.

Обязательные функции DDI для защиты содержимого

Если защита содержимого реализована в драйвере отображения пользовательского режима, драйвер должен поддерживать следующие функции DDI защиты содержимого:

  • Функция CreateAuthenticatedChannel создает канал, который среда выполнения Direct3D и драйвер могут использовать для установки и запроса защиты.

  • Функция AuthenticatedChannelKeyExchange согласовывает ключ сеанса.

  • Функция QueryAuthenticatedChannel запрашивает прошедший проверку подлинности канал для получения сведений о возможностях и состоянии.

  • Функция ConfigureAuthenticatedChannel задает состояние в канале, прошедшем проверку подлинности.

  • Функция DestroyAuthenticatedChannel освобождает ресурсы для канала, прошедшего проверку подлинности.

  • Функция CreateCryptoSession создает сеанс шифрования , который среда выполнения Direct3D использует для управления ключом сеанса и выполнения криптографических операций в защищенной памяти и из нее.

  • Функция CryptoSessionKeyExchange согласовывает ключ сеанса.

  • Функция DestroyCryptoSession освобождает ресурсы для сеанса шифрования.

Возможности защиты содержимого

Драйвер отображения пользовательского режима сообщает о возможностях защиты содержимого только в том случае, если он поддерживает все предыдущие обязательные функции DDI защиты содержимого. Следующие D3DDDICAPS_TYPE значения используются средой выполнения Direct3D для получения сведений о возможностях защиты содержимого, поддерживаемых драйвером отображения в пользовательском режиме. Среда выполнения задает эти D3DDDICAPS_TYPE значения в элементе Typeструктуры D3DDDIARG_GETCAPS , на которую указывает параметр pData функции GetCaps драйвера, когда среда выполнения вызывает GetCaps.

D3DDDICAPS_GETCONTENTPROTECTIONCAPS
Среда выполнения предоставляет указатель на структуру DDICONTENTPROTECTIONCAPS для конкретной комбинации шифрования и декодирования, которую должен использовать драйвер. Драйвер возвращает указатель на заполненную структуру D3DCONTENTPROTECTIONCAPS, которая описывает возможности драйвера по защите содержимого для сочетания шифрования и декодирования. Дополнительные сведения о D3DCONTENTPROTECTIONCAPS см. в документации по пакету SDK для DirectX.

D3DDDICAPS_GETCERTIFICATESIZE
Драйвер предоставляет указатель на число, указывающее размер (в байтах) сертификата драйвера, используемого для канала или типа шифрования. Затем среда выполнения Direct3D использует этот размер для выделения буфера для хранения сведений о сертификате, получаемых средой выполнения, когда среда выполнения вызывает GetCaps с D3DDDICAPS_GETCERTIFICATE.

D3DDDICAPS_GETCERTIFICATE
Среда выполнения предоставляет указатель на структуру DDICERTIFICATEINFO , которая описывает сертификат, который должен получить драйвер.

Для канала, прошедшего проверку подлинности, драйвер использует существующий сертификат OPM , который представляет собой сертификат X.509, подписанный корпорацией Майкрософт.

Приложение может запросить сертификат драйвера, чтобы определить следующие сведения:

  • Является ли драйвер доверенным.

  • Отозван ли драйвер.

  • Открытый ключ драйвера. Приложение использует открытый ключ драйвера, чтобы установить ключ сеанса для канала, прошедшего проверку подлинности, который используется для проверки подлинности.

Вызов GetCaps с набором D3DDDICAPS_GETCERTIFICATE завершается ошибкой при вызове для канала с проверкой подлинности Direct3D 9, так как этот канал не поддерживает сертификат или проверку подлинности.

Для сеанса шифрования драйвер возвращает сертификат для указанного типа шифрования. В зависимости от типа шифрования и используемого обмена ключами сертификат может использоваться или не использоваться. Также возможно, что разные типы шифрования могут использовать разные сертификаты.

Необязательные функции DDI для защиты содержимого

При необходимости драйвер может поддерживать следующие функции DDI защиты содержимого:

  • Функция EncryptionBlt считывает зашифрованные данные с защищенной поверхности.

  • Функция GetPitch извлекает шаг защищенной поверхности.

  • Функция StartSessionKeyRefresh возвращает случайное число, которое декодер или приложение, а также драйвер или оборудование могут впоследствии использовать для выполнения монопольной операции ИЛИ (XOR) с ключом сеанса.

  • Функция FinishSessionKeyRefresh указывает, что все буферы с этого момента времени будут использовать обновленное значение ключа сеанса.

  • Функция GetEncryptionBltKey возвращает ключ, используемый для расшифровки данных, возвращаемой функцией EncryptionBlt драйвера.

  • Функция DecryptionBlt записывает данные в защищенную поверхность.

Ресурсы, защищенные содержимым

Следующие D3DDDI_RESOURCEFLAGS флаги используются средой выполнения Direct3D для защищенного содержимого. Среда выполнения задает эти флаги D3DDDI_RESOURCEFLAGS в элементе Flags структуры D3DDDIARG_CREATERESOURCE , на которую указывает параметр pResource функции CreateResource драйвера, когда среда выполнения вызывает CreateResource.

RestrictedContent
Ресурс может содержать защищенное содержимое. Приложение может явно включить или не включить защиту содержимого до того, как приложение создаст ресурс. Драйвер должен убедиться, что среда выполнения помещает выделение ресурса в пул памяти, который может быть защищен. Драйвер должен разрешить создание блокируемых защищенных ресурсов. Однако драйвер должен явно завершить вызовы функции Lock , чтобы заблокировать эти поверхности, пока включена защита содержимого.

RestrictSharedAccess
Доступ к общему ресурсу должен быть разрешен только определенным процессам.

Драйвер должен ограничить общий доступ к этому ресурсу. Среда выполнения может вызывать функцию OpenResource драйвера только для открытия этого ресурса с устройствами отображения (hDevice) в процессе, создавшем ресурс, или устройствами, которым был явно предоставлен доступ через канал, прошедший проверку подлинности.