DXGKDDI_OPM_SET_SIGNING_KEY_AND_SEQUENCE_NUMBERS função de retorno de chamada (dispmprt.h)
A função DxgkDdiOPMSetSigningKeyAndSequenceNumbers define a chave de assinatura do objeto de saída protegido fornecido e dois números de sequência.
Sintaxe
DXGKDDI_OPM_SET_SIGNING_KEY_AND_SEQUENCE_NUMBERS DxgkddiOpmSetSigningKeyAndSequenceNumbers;
NTSTATUS DxgkddiOpmSetSigningKeyAndSequenceNumbers(
[in] PVOID MiniportDeviceContext,
[in] HANDLE ProtectedOutputHandle,
[in] const DXGKMDT_OPM_ENCRYPTED_PARAMETERS *EncryptedParameters
)
{...}
Parâmetros
[in] MiniportDeviceContext
Um identificador para um bloco de contexto associado a um adaptador de exibição. Anteriormente, a função DxgkDdiAddDevice do driver de miniporta de exibição forneceu esse identificador para o subsistema de kernel de elementos gráficos DirectX.
[in] ProtectedOutputHandle
O identificador para um objeto de saída protegido. A função DxgkDdiOPMCreateProtectedOutput cria o objeto de saída protegido e retorna o identificador para o objeto .
[in] EncryptedParameters
Um ponteiro para uma estrutura DXGKMDT_OPM_ENCRYPTED_PARAMETERS que contém uma matriz de 256 bytes. A matriz contém entre 40 e 256 bytes de dados criptografados com a chave pública do certificado apropriado. Para obter mais informações sobre a chave pública, baixe o documento Proteção de Conteúdo de Saída do Gerenciador de Proteção de Saída de Suporte. Se a saída protegida tiver semântica do OPM, os dados serão criptografados com a chave pública do certificado OPM do driver de miniporta de exibição. Se a saída protegida tiver semântica COPP (Certified Output Protection Protocol), os dados serão criptografados com a chave pública do certificado COPP do driver de miniporta de exibição.
O algoritmo que o driver de miniporto de exibição deve usar para descriptografar os dados na matriz depende da semântica da saída protegida. As saídas protegidas com semântica do OPM usam o esquema de criptografia RSAES-OAEP para descriptografar os dados. Para obter mais informações sobre o RSAES-OAEP, consulte o site do RSA Laboratories . Saídas protegidas com semântica COPP usam o algoritmo de criptografia RSA padrão para descriptografar os dados criptografados.
Depois que o driver de miniporta de exibição descriptografa os dados, somente os primeiros 40 bytes dos dados são úteis no momento. Os primeiros 16 bytes dos dados descriptografados contêm o número aleatório que a função DxgkDdiOPMGetRandomNumber do driver de miniporta de exibição retornou quando o identificador no parâmetro ProtectedOutputHandle foi passado para ele. Os próximos 16 bytes contêm a chave de assinatura AES de 128 bits. Os próximos 4 bytes contêm o número de sequência usado por DxgkDdiOPMGetInformation ou DxgkDdiOPMGetCOPPCompatibleInformation. Os 4 bytes finais contêm o número de sequência usado por DxgkDdiOPMConfigureProtectedOutput. O restante dos dados descriptografados deve ser ignorado se existirem.
Retornar valor
DxgkDdiOPMSetSigningKeyAndSequenceNumbers retornará STATUS_SUCCESS se a função definir com êxito a chave de assinatura e dois números de sequência. Caso contrário, ele poderá retornar STATUS_OPM_INVALID_ENCRYPTED_PARAMETERS por um dos seguintes motivos:
- Se a saída protegida tiver semântica OPM, os dados que o driver de miniporto de exibição descriptografou não foram codificados com o algoritmo de codificação RSAES-OAEP. Para obter mais informações sobre RSAES-OAEP, consulte a seção 7.1.2 no PKCS #1 v2.1: RSA Cryptography Standard, no site do RSA Laboratories .
- Os dados não foram criptografados pelo chamador com a chave pública apropriada. Se a saída tiver semântica do OPM, o chamador deverá criptografar os dados com a chave pública do certificado OPM do driver de miniporta de exibição. Se a saída tiver semântica COPP, o chamador deverá criptografar os dados com a chave pública do certificado COPP do driver de miniporta de exibição.
- O chamador não criptografou pelo menos 40 bytes de dados.
- O número aleatório de 16 bytes nos dados que o driver de miniporto de exibição descriptografou não correspondeu ao número aleatório de 16 bytes retornado pela função DxgkDdiOPMGetRandomNumber .
Essa função também pode retornar outros códigos de erro definidos em Ntstatus.h.
Comentários
A chave de assinatura é usada para verificar se os dados passados para as funções DxgkDdiOPMConfigureProtectedOutput e DxgkDdiOPMGetInformation vêm do aplicativo que usa indiretamente a saída protegida. A chave de assinatura também é usada para assinar os dados retornados pelas funções DxgkDdiOPMGetInformation e DxgkDdiOPMGetCOPPCompatibleInformation . Um dos números de sequência é usado por DxgkDdiOPMConfigureProtectedOutput. O outro número de sequência é usado por DxgkDdiOPMGetInformation ou DxgkDdiOPMGetCOPPCompatibleInformation.
DxgkDdiOPMSetSigningKeyAndSequenceNumbers deve retornar um código de falha se ocorrer um erro ou se os dados na estrutura DXGKMDT_OPM_ENCRYPTED_PARAMETERS que é apontado pelo parâmetro EncryptedParameters não estiverem no formato necessário. Caso contrário, DxgkDdiOPMSetSigningKeyAndSequenceNumbers deve executar a seguinte sequência de operações:
- Descriptografe os dados apontados por EncryptedParameters com a chave privada e o esquema de criptografia apropriados. Se a saída tiver semântica OPM, o driver de miniporta de exibição deverá usar sua chave privada OPM para descriptografar os dados. Se a saída tiver semântica COPP, o driver de miniporta de exibição deverá usar sua chave privada COPP para descriptografar os dados.
- Se a saída tiver semântica OPM, verifique se os dados que foram descriptografados foram codificados com o algoritmo de codificação RSAES-OAEP.
- Verifique se pelo menos 40 bytes dos dados foram descriptografados.
- Verifique se o número aleatório contido nos primeiros 16 bytes dos dados que foram descriptografados corresponde ao número aleatório que o DxgkDdiOPMGetRandomNumber do driver de miniporta de exibição retornou quando o identificador no parâmetro ProtectedOutputHandle foi passado para ele.
- Armazene em cache a chave de assinatura AES de 128 bits e os dois números de sequência de 32 bits.
Antes que o identificador de um objeto de saída protegido seja passado para DxgkDdiOPMSetSigningKeyAndSequenceNumbers, ele é passado para DxgkDdiOPMGetRandomNumber. Cada identificador de objeto de saída protegido só é passado para DxgkDdiOPMSetSigningKeyAndSequenceNumbers uma vez.
DxgkDdiOPMSetSigningKeyAndSequenceNumbers deve ser tornado paginável.
Parâmetros RSAES-OAEP e MGF1
RSAES-OAEP é um esquema de criptografia parametrizado e MGF1 é uma função de geração de máscara parametrizada. A seguir estão os parâmetros que o OPM usa quando usa RSAES-OAEP e MGF1. Para obter mais informações sobre os termos a seguir e o RSA Cryptography Standard, consulte os sites laboratórios RSA e hash seguro.
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Área de Trabalho |
Cabeçalho | dispmprt.h (inclua Dispmprt.h) |
IRQL | PASSIVE_LEVEL (consulte a seção Comentários) |
Confira também
DxgkDdiOPMGetCOPPCompatibleInformation
DxgkDdiOPMCreateProtectedOutput
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de