Método IDirect3DCryptoSession9::EncryptionBlt (d3d9.h)
Lee los datos cifrados de una superficie protegida.
Sintaxis
HRESULT EncryptionBlt(
IDirect3DSurface9 *pSrcSurface,
IDirect3DSurface9 *pDstSurface,
UINT DstSurfaceSize,
VOID *pIV
);
Parámetros
pSrcSurface
Puntero a la superficie protegida.
pDstSurface
Puntero a una superficie que recibe los datos cifrados.
DstSurfaceSize
Tamaño de la memoria expuesta a la que pDstSurface apunta, en bytes. El tamaño debe estar alineado con el valor de BlockAlignmentSize en la estructura de funcionalidades del controlador; vea Comentarios.
pIV
Puntero a un búfer que recibe el vector de inicialización (IV). El autor de la llamada asigna este búfer, pero el controlador genera el IV.
Si el tipo de cifrado es D3DCRYPTOTYPE_AES128_CTR (AES-CTR de 128 bits), pIV apunta a una estructura de D3DAES_CTR_IV . Cuando el controlador genera el primer IV, inicializa la estructura en un número aleatorio. Para cada IV posterior, el controlador simplemente incrementa el miembro IV de la estructura, asegurándose de que el valor siempre aumenta. Este procedimiento permite a la aplicación validar que el mismo IV nunca se usa más de una vez con el mismo par de claves.
En el caso de otros tipos de cifrado, se puede usar una estructura diferente o el cifrado podría no usar un IV.
Valor devuelto
Si este método se realiza correctamente, devuelve S_OK. De lo contrario, devuelve un código de error de HRESULT.
Comentarios
Si el controlador admite este método, establece la marca D3DCPCAPS_ENCRYPTEDREADBACK en la estructura de funcionalidades devuelta por el método IDirect3DDevice9Video::GetContentProtectionCaps .
Si el controlador establece la marca de funcionalidades de D3DCPCAPS_ENCRYPTEDREADBACKKEY , significa que el controlador usa una clave independiente para cifrar los datos. Para obtener esta clave, llame al método IDirect3DCryptoSession9::GetEncryptionBltKey . De lo contrario, el controlador usa la clave de sesión para cifrar los datos.
Asigne la superficie de destino (pDstSurface) de la siguiente manera:
- Llame a IDirect3DCryptoSession9::GetSurfacePitch para obtener el paso de la superficie protegida.
- Llame al método GetContentProtectionCaps para obtener el valor de los miembros BufferAlignmentStart y BlockAlignmentSize en la estructura D3DCONTENTPROTECTIONCAPS .
- Calcule el tamaño mínimo de la memoria expuesta como SysMemSize = intervalo de superficie protegido × alto de superficie protegida.
- Agregue relleno para dar cabida a los valores de BufferAlignmentStart y BlockAlignmentSize.
- Asigne un búfer en la memoria del sistema, con el tamaño igual a SysMemSize (incluido el relleno).
- Si la dirección del búfer de memoria del sistema no está alineada con el valor de BufferAlignmentStart, calcule un puntero alineado con memoria que sea un desplazamiento desde el inicio del búfer.
- Llame a IDirect3DDevice9Ex::CreateOffscreenPlainSurfaceEx para crear la superficie de destino. Pase el puntero alineado con memoria como identificador de recursos compartidos (pSharedHandle).
- El método no puede leer subrectangles ni superficies parcialmente cifradas.
- La superficie protegida debe ser una superficie sin formato o un destino de representación.
- La superficie de destino debe ser una superficie de memoria del sistema, creada con la alineación adecuada, como se ha descrito anteriormente.
- La superficie protegida no puede ser multimuestreo.
- El método no admite la conversión de espacio de colores o de extensión.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 7 [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2008 R2 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | d3d9.h |