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


функция обратного вызова PFND3DDDI_ENCRYPTIONBLT (d3dumddi.h)

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

Синтаксис

PFND3DDDI_ENCRYPTIONBLT Pfnd3dddiEncryptionblt;

HRESULT Pfnd3dddiEncryptionblt(
  HANDLE hDevice,
  const D3DDDIARG_ENCRYPTIONBLT *unnamedParam2
)
{...}

Параметры

hDevice

Дескриптор устройства отображения (графический контекст).

unnamedParam2

pData [in]

Указатель на структуру D3DDDIARG_ENCRYPTIONBLT , описывающую параметры операции передачи зашифрованных битовых блоков (bitblt).

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

EncryptionBlt возвращает одно из следующих значений:

Код возврата Описание
S_OK Зашифрованная операция bitblt успешно выполнена.
E_OUTOFMEMORY EncryptionBlt не удалось выделить необходимую память для ее завершения.
D3DDDIERR_NOTAVAILABLE Драйвер не поддерживает функцию EncryptionBlt.

Комментарии

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

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

Если тип шифрования D3DCRYPTOTYPE_AES128_CTR, pIV указывает на структуру D3DAES_CTR_IV, которую выделяет приложение. Однако фактическое содержимое структуры D3DAES_CTR_IV заполняется драйвером и оборудованием. Когда драйвер и оборудование создают первый вектор инициализации, они должны инициализировать элемент IV структуры D3DAES_CTR_IV случайным числом (не слишком большим). Каждый последующий вектор инициализации должен просто увеличивать член IV , что гарантирует, что iv всегда увеличивает значение. Этот факт позволяет приложению убедиться, что один и тот же iv никогда не используется несколько раз с одной парой ключей.

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

Среда выполнения Direct3D проверяет, находится ли целевая поверхность, указанная членом DstSubResourceIndex D3DDDIARG_ENCRYPTIONBLT, находится в системной памяти и не выполняется ли растягивание, преобразование цветового пространства и т. д. Приложение должно убедиться, что буфер системной памяти правильно выравнивается и размер буфера соответствует исходной поверхности. Драйвер должен проверить выравнивание памяти и размер буфера (элемент DstResourceSize D3DDDIARG_ENCRYPTIONBLT) и выполнить сбой, если эти условия неверны.

Требования

Требование Значение
Минимальная версия клиента EncryptionBlt поддерживается начиная с операционной системы Windows 7.
Целевая платформа Персональный компьютер
Верхняя часть d3dumddi.h (включая D3dumddi.h)

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

D3DDDIARG_ENCRYPTIONBLT

D3DDDI_DEVICEFUNCS