Usando a DDI OPM
O subsistema kernel de gráficos do Microsoft DirectX (Dxgkrnl.sys) usa a DDI do OPM para criar saídas protegidas por OPM, destruir saídas protegidas por OPM, obter certificados, configurar saídas protegidas e obter informações sobre saídas protegidas e sobre o adaptador gráfico. O subsistema kernel de gráficos DirectX obtém ponteiros para as funções DDI do OPM quando chama a função DxgkDdiQueryInterface do driver de miniporta de exibição para consultar a interface identificada por GUID_DEVINTERFACE_OPM e DXGK_OPM_INTERFACE_VERSION_1. A sequência a seguir descreve como a DDI do OPM é normalmente usada para criar, manipular e destruir saídas protegidas por OPM:
O subsistema kernel de gráficos DirectX chama a função DxgkDdiOPMCreateProtectedOutput para criar uma saída protegida por OPM. Uma saída protegida por OPM sempre corresponde exatamente a uma saída de vídeo física. A DxgkDdiOPMCreateProtectedOutput retorna um identificador para a saída recém-criada.
O subsistema kernel de gráficos DirectX chama as funções DxgkDdiOPMGetCertificateSize e DxgkDdiOPMGetCertificate para obter o certificado OPM ou o certificado COPP do driver de miniporta de exibição e seu tamanho.
Observação
DxgkDdiOPMCreateProtectedOutput, DxgkDdiOPMGetCertificateSize, e DxgkDdiOPMGetCertificate são as únicas funções DDI do OPM para as quais o subsistema kernel de gráficos DirectX não passa um identificador de saída protegido.
O subsistema kernel de gráficos DirectX chama a função DxgkDdiOPMGetRandomNumber para obter o número aleatório da saída protegida.
O subsistema kernel de gráficos DirectX passa um buffer de 256 bytes em uma chamada para a função DxgkDdiOPMSetSigningKeyAndSequenceNumbers. O buffer contém dados criptografados com uma das chaves públicas do driver de miniporta de exibição. Para obter mais informações sobre as chaves públicas, baixe o documento sobre Proteção de Conteúdo de Saída do site Proteção de Conteúdo de Saída e Windows Vista. A chave pública usada depende da semântica da saída protegida. A chave pública no certificado OPM do driver de miniporta de exibição será usada se a saída protegida tiver uma semântica OPM. A chave pública no certificado COPP do driver de miniporta de exibição será usada se a saída protegida tiver uma semântica COPP. O esquema de criptografia usado para criptografar os dados também depende da semântica da saída protegida. Os dados são criptografados com o algoritmo RSA padrão se a saída protegida tiver uma semântica COPP e com o esquema de criptografia RSAES-OAEP se a saída protegida tiver uma semântica OPM. Para obter informações sobre RSA, AES e RSAES-OAEP, consulte o site Laboratórios RSA. O driver de miniporta de exibição usa a chave privada apropriada e o método de descriptografia para descriptografar os dados. Um número aleatório, dois números de sequência aleatórios e uma chave AES de 128 bits estão entre os dados descriptografados. A unidade de miniporta de exibição garante que o número aleatório corresponda ao número aleatório que o driver retornou quando a sua função DxgkDdiOPMGetRandomNumber foi chamada. Em seguida, o driver armazena os dois números de sequência e a chave AES de 128 bits.
O subsistema kernel de gráficos DirectX agora pode chamar a função DxgkDdiOPMGetInformation ou DxgkDdiOPMGetCOPPCompatibleInformation para obter informações sobre uma saída protegida. O subsistema kernel de gráficos DirectX também pode chamar a DxgkDdiOPMConfigureProtectedOutput para configurar uma saída protegida. A DxgkDdiOPMGetInformation pode ser chamada somente se a saída tiver uma semântica OPM e a DxgkDdiOPMGetCOPPCompatibleInformation pode ser chamada somente se a saída tiver uma semântica COPP. Normalmente, o subsistema kernel de gráficos DirectX chama a DxgkDdiOPMGetInformation ou a DxgkDdiOPMGetCOPPCompatibleInformation para obter informações sobre a saída e, em seguida, chama a DxgkDdiOPMConfigureProtectedOutput uma ou mais vezes para configurar a saída. Em seguida, o subsistema kernel de gráficos DirectX chama a DxgkDdiOPMGetInformation ou a DxgkDdiOPMGetCOPPCompatibleInformation novamente. O subsistema kernel de gráficos DirectX pode obter os seguintes tipos de informações chamando a DxgkDdiOPMGetInformation ou a DxgkDdiOPMGetCOPPCompatibleInformation:
- O tipo de conector da saída.
- Os tipos de proteção de conteúdo suportados pela saída. Atualmente, as saídas podem suportar:
- Proteção contra cópia analógica (ACP)
- Sistema de gerenciamento de geração de conteúdo analógico (CGMS-A)
- Proteção de conteúdo digital de alta largura de banda (HDCP)
- Proteção de conteúdo DisplayPort (DPCP)
- O nível de proteção virtual atual da saída para um tipo de proteção específico.
- O nível de proteção real da saída física para um tipo de proteção específico.
- A versão da Mensagem de renovação do sistema (SRM) de HDCP que a saída usa atualmente. Para obter mais informações sobre o SRM de HDCP, consulte a Revisão de especificação de HDCP 1.1. Somente a DxgkDdiOPMGetInformation pode obter essas informações.
- O vetor de seleção de chave (KSV) do dispositivo HDCP conectado e se o dispositivo HDCP é um repetidor. Somente a DxgkDdiOPMGetCOPPCompatibleInformation pode obter essas informações. Para obter mais informações sobre repetidores HDCP e KSVs, consulte a Revisão de especificação de HDCP 1.1.
- O tipo de barramento de expansão que o adaptador gráfico usa. PCI e AGP são exemplos de barramentos de expansão.
- O formato das imagens enviadas do conector físico associado à saída protegida para um monitor.
- Os padrões de sinalização CGMS-A e ACP que a saída protegida suporta. Somente a DxgkDdiOPMGetCOPPCompatibleInformation pode obter essas informações.
- O identificador da saída.
- As características elétricas de um conector de saída DVI (interface de vídeo digital).
O subsistema kernel de gráficos DirectX pode alterar as seguintes configurações chamando a DxgkDdiOPMConfigureProtectedOutput:
- O nível de proteção atual de um dos tipos de proteção da saída. Por exemplo, a DxgkDdiOPMConfigureProtectedOutput pode ativar ou desativar o HDCP, desativar a proteção ACP ou alterar o nível de proteção ACP atual.
- O SRM de HDCP atual que a saída protegida usa.
- O padrão de sinalização atual que a saída protegida usa. Essa alteração só pode ser feita se a saída tiver uma semântica COPP.
O subsistema kernel de gráficos DirectX chama a DxgkDdiOPMDestroyProtectedOutput ao terminar de usar o objeto da saída protegida.