Uso de la DDI de OPM

El subsistema basado en kernel de gráficos de Microsoft DirectX (Dxgkrnl.sys) usa DDI de OPM para crear salidas protegidas de OPM, destruir salidas protegidas de OPM, obtener certificados, configurar salidas protegidas, obtener información sobre las salidas protegidas y obtener información sobre el adaptador de gráficos. El subsistema basado en kernel de gráficos de DirectX obtiene punteros a las funciones de DDI de OPM cuando llama a la función DxgkDdiQueryInterface del controlador minipuerto para consultar la interfaz identificada por GUID_DEVINTERFACE_OPM y DXGK_OPM_INTERFACE_VERSION_1. En la secuencia siguiente se describe cómo se usa normalmente la DDI de OPM para crear, manipular y destruir salidas protegidas de OPM:

  1. El subsistema basado en kernel de gráficos de DirectX llama a la función DxgkDdiOPMCreateProtectedOutput para crear una salida protegida de OPM. Una salida protegida de OPM siempre se corresponde concretamente con una salida de vídeo física. DxgkDdiOPMCreateProtectedOutput devuelve un identificador en la salida recién creada.

  2. El subsistema basado en kernel de gráficos de DirectX llama a las funciones DxgkDdiOPMGetCertificateSize y DxgkDdiOPMGetCertificate para obtener el certificado de OPM o de COPP del controlador de pantalla minipuerto y su tamaño.

    Nota:

    DxgkDdiOPMCreateProtectedOutput, DxgkDdiOPMGetCertificateSize, y DxgkDdiOPMGetCertificate son las únicas funciones de DDI de OPM a las que el subsistema basado en kernel de gráficos DirectX no pasa un identificador de salida protegida.

  3. El subsistema basado en kernel de gráficos de DirectX llama a la función DxgkDdiOPMGetRandomNumber para obtener el número aleatorio de la salida protegida.

  4. El subsistema basado en kernel de gráficos de DirectX pasa un búfer de 256 bytes en una llamada a la función DxgkDdiOPMSetSigningKeyAndSequenceNumbers. El búfer contiene datos cifrados con una de las claves públicas del controlador minipuerto de pantalla. Para obtener más información sobre las claves públicas, descargue el documento Protección de contenido de salida del sitio web Protección de contenido de salida y Windows Vista. La clave pública que se usa depende de la semántica de la salida protegida. La clave pública del certificado de OPM del controlador minipuerto de pantalla se usa si la salida protegida tiene semántica de OPM. La clave pública del certificado de COPP del controlador minipuerto de pantalla se usa si la salida protegida tiene semántica de COPP. El esquema de cifrado que se usa para cifrar los datos también depende de la semántica de la salida protegida. Los datos se cifran con el algoritmo RSA estándar si la salida protegida tiene semántica de COPP y con el esquema de cifrado RSAES-OAEP si la salida protegida tiene semántica de OPM. Para obtener información sobre RSA, AES y RSAES-OAEP, consulte el sitio web RSA Laboratories (Laboratorios de RSA). El controlador minipuerto de pantalla usa la clave privada y el método de descifrado adecuados para descifrar los datos. Un número aleatorio, dos números de secuencia aleatorios y una clave AES de 128 bits componen los datos descifrados. La unidad de minipuerto de pantalla garantiza que el número aleatorio coincida con el número aleatorio devuelto por el controlador tras llamar a la función DxgkDdiOPMGetRandomNumber. Tras esto, el controlador almacena los dos números de la secuencia y la clave AES de 128 bits.

  5. El subsistema basado en kernel de gráficos DirectX puede llamar a la función DxgkDdiOPMGetInformation o DxgkDdiOPMGetCOPPCompatibleInformation para obtener información de la salida protegida. El subsistema basado en kernel de gráficos DirectX también puede llamar a DxgkDdiOPMConfigureProtectedOutput para configurar una salida protegida. Solo se puede llamar a DxgkDdiOPMGetInformation si la salida tiene semántica de OPM y solo se puede llamar a DxgkDdiOPMGetCOPPCompatibleInformation si la salida tiene semántica de COPP. Normalmente, el subsistema basado en kernel gráficos DirectX llama a DxgkDdiOPMGetInformation o DxgkDdiOPMGetCOPPCompatibleInformation para obtener información de la salida y luego llama a DxgkDdiOPMConfigureProtectedOutput una o varias veces para configurar la salida. Después, el subsistema basado en kernel de gráficos de DirectX llama a DxgkDdiOPMGetInformation o DxgkDdiOPMGetCOPPCompatibleInformation de nuevo. El subsistema basado en kernel de gráficos de DirectX puede obtener los siguientes tipos de información llamando a DxgkDdiOPMGetInformation o DxgkDdiOPMGetCOPPCompatibleInformation:

    El subsistema basado en kernel de gráficos de DirectX puede cambiar la siguiente configuración llamando a DxgkDdiOPMConfigureProtectedOutput:

    • Nivel de protección actual de uno de los tipos de protección de la salida. Por ejemplo, DxgkDdiOPMConfigureProtectedOutput puede habilitar o deshabilitar la HDCP y puede desactivar la protección ACP o cambiar el nivel de protección de ACP actual.
    • SRM de HDCP actual que usa la salida protegida.
    • Estándar de señalización actual que usa la salida protegida. Este cambio solo se puede realizar si la salida tiene semántica de COPP.
  6. El subsistema basado en kernel de gráficos de DirectX llama a DxgkDdiOPMDestroyProtectedOutput cuando termina de usar el objeto de salida protegida.