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


Метод ID3D11VideoContext::D ecryptionBlt (d3d11.h)

Записывает зашифрованные данные в защищенную поверхность.

Синтаксис

void DecryptionBlt(
  [in] ID3D11CryptoSession        *pCryptoSession,
  [in] ID3D11Texture2D            *pSrcSurface,
  [in] ID3D11Texture2D            *pDstSurface,
  [in] D3D11_ENCRYPTED_BLOCK_INFO *pEncryptedBlockInfo,
  [in] UINT                       ContentKeySize,
  [in] const void                 *pContentKey,
  [in] UINT                       IVSize,
  [in] void                       *pIV
);

Параметры

[in] pCryptoSession

Указатель на интерфейс ID3D11CryptoSession .

[in] pSrcSurface

Указатель на поверхность, содержащую исходные данные.

[in] pDstSurface

Указатель на защищенную поверхность, в которой записываются зашифрованные данные.

[in] pEncryptedBlockInfo

Указатель на структуру D3D11_ENCRYPTED_BLOCK_INFO или значение NULL.

Если драйвер поддерживает частично зашифрованные буферы, pEncryptedBlockInfo указывает, какие части буфера зашифрованы. Если вся поверхность зашифрована, задайте для этого параметра значение NULL.

Чтобы проверка, поддерживает ли драйвер частично зашифрованные буферы, вызовите ID3D11VideoDevice::GetContentProtectionCaps и проверка для флага возможностей D3D11_CONTENT_PROTECTION_CAPS_PARTIAL_DECRYPTION. Если драйвер не поддерживает частично зашифрованные буферы, задайте для этого параметра значение NULL.

[in] ContentKeySize

Размер зашифрованного ключа содержимого в байтах.

[in] pContentKey

Указатель на буфер, содержащий ключ шифрования содержимого или NULL. Чтобы запросить, поддерживает ли драйвер использование ключей содержимого, вызовите ID3D11VideoDevice::GetContentProtectionCaps и проверка для флага возможностей D3D11_CONTENT_PROTECTION_CAPS_CONTENT_KEY.

Если драйвер поддерживает ключи содержимого, используйте ключ содержимого для шифрования поверхности. Зашифруйте ключ содержимого с помощью ключа сеанса и поместите полученный текст шифра в pContentKey. Если драйвер не поддерживает ключи содержимого, используйте ключ сеанса для шифрования surface и задайте для параметра pContentKeyзначение NULL.

[in] IVSize

Размер буфера pIV в байтах.

[in] pIV

Указатель на буфер, содержащий вектор инициализации (IV).

Для 128-разрядного шифрования AES-CTR pIV указывает на D3D11_AES_CTR_IV структуру. Вызывающий объект выделяет структуру и создает iv. При создании первого IV инициализируйте структуру случайным числом. Для каждого последующего IV просто увеличивайте элемент IV структуры, гарантируя, что значение всегда увеличивается. Эта процедура позволяет драйверу проверить, что один и тот же iv никогда не используется более одного раза с одной парой ключей.

Для других типов шифрования может использоваться другая структура или шифрование может не использовать iv.

Возвращаемое значение

Если этот метод завершается успешно, он возвращает S_OK. В противном случае возвращается код ошибки HRESULT .

Комментарии

Не все оборудование или драйверы поддерживают эту функцию для всех типов шифрования. Эту функцию можно вызывать только при указании ограничения D3D11_CONTENT_PROTECTION_CAPS_DECRYPTION_BLT .

Этот метод не поддерживает запись во вложенные прямоугольники поверхности.

Если оборудование и драйвер поддерживают ключ содержимого:

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

Если драйвер и оборудование поддерживают частично зашифрованные буферы, pEncryptedBlockInfo указывает, какие части буфера зашифрованы, а какие нет. Если весь буфер зашифрован, значение pEncryptedBlockinfo должно иметь значение NULL.

D3D11_ENCRYPTED_BLOCK_INFO позволяет приложению указать, какие байты в буфере зашифрованы. Этот параметр указывается в байтах, поэтому приложение должно убедиться, что зашифрованные блоки соответствуют выравниванию блоков шифрования GPU.

Эта функция не учитывает предикат D3D11, который мог быть задан.

Если приложение использует запросы D3D11, эта функция может не учитываться с D3D11_QUERY_EVENT и D3D11_QUERY_TIMESTAMP при использовании уровней функций ниже 11. D3D11_QUERY_PIPELINE_STATISTICS не будет включать эту функцию для любого уровня функций.

Требования

   
Минимальная версия клиента Windows 8 [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2012 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header d3d11.h

См. также раздел

ID3D11VideoContext