Content Protection DDI
Dieser Abschnitt gilt nur für Windows 7 und höher sowie Windows Server 2008 R2 und höhere Versionen des Windows-Betriebssystems.
Der Content Protection DDI ist eine Erweiterung der Direct3D-Version 9 DDI zum Schutz von Videos. Der Inhaltsschutz-DDI besteht aus den Einstiegspunkten, die in diesem Abschnitt beschrieben werden.
Erforderliche Inhaltsschutz-DDI-Funktionen
Wenn der Inhaltsschutz im Anzeigetreiber für den Benutzermodus implementiert ist, muss der Treiber die folgenden Content Protection-DDI-Funktionen unterstützen:
Die CreateAuthenticatedChannel-Funktion erstellt einen Kanal, den die Direct3D-Runtime und der Treiber verwenden können, um Schutzmechanismen festzulegen und abzufragen.
Die AuthenticatedChannelKeyExchange-Funktion verhandelt den Sitzungsschlüssel.
Die QueryAuthenticatedChannel-Funktion fragt einen authentifizierten Kanal nach Funktions- und Zustandsinformationen ab.
Die ConfigureAuthenticatedChannel-Funktion legt den Zustand in einem authentifizierten Kanal fest.
Die DestroyAuthenticatedChannel-Funktion gibt Ressourcen für einen authentifizierten Kanal frei.
Die CreateCryptoSession-Funktion erstellt eine Kryptositzung, die die Direct3D-Runtime zum Verwalten eines Sitzungsschlüssels und zum Ausführen von Kryptovorgängen in und aus dem geschützten Arbeitsspeicher verwendet.
Die CryptoSessionKeyExchange-Funktion verhandelt den Sitzungsschlüssel.
Die DestroyCryptoSession-Funktion gibt Ressourcen für eine Verschlüsselungssitzung frei.
Inhaltsschutzfunktionen
Der Benutzermodusanzeigetreiber meldet nur Funktionen zum Schutz von Inhalten, wenn er jede der zuvor erforderlichen Content Protection-DDI-Funktionen unterstützt. Die folgenden D3DDDICAPS_TYPE Werte werden von der Direct3D-Runtime verwendet, um Informationen zu den Inhaltsschutzfunktionen abzurufen, die der Benutzermodusanzeigetreiber unterstützt. Die Runtime legt diese D3DDDICAPS_TYPE Werte im Type-Member der D3DDDIARG_GETCAPS-Struktur fest, auf die der pData-Parameter der GetCaps-Funktion des Treibers verweist, wenn die Runtime GetCaps aufruft.
D3DDDICAPS_GETCONTENTPROTECTIONCAPS
Die Runtime stellt einen Zeiger auf eine DDICONTENTPROTECTIONCAPS-Struktur für die spezifische Verschlüsselungs- und Decodierungskombination bereit, die der Treiber verwenden soll. Der Treiber gibt einen Zeiger auf eine aufgefüllte D3DCONTENTPROTECTIONCAPS-Struktur zurück, die die Inhaltsschutzfunktionen des Treibers für die Verschlüsselungs- und Decodierungskombination beschreibt. Weitere Informationen zu D3DCONTENTPROTECTIONCAPS finden Sie in der Dokumentation zum DirectX SDK.
D3DDDICAPS_GETCERTIFICATESIZE
Der Treiber stellt einen Zeiger auf eine Zahl bereit, die die Größe des Treiberzertifikats in Bytes angibt, das für einen Kanal- oder Kryptotyp verwendet wird. Die Direct3D-Runtime verwendet dann diese Größe, um einen Puffer zuzuweisen, der die Zertifikatinformationen enthält, die die Runtime empfängt, wenn die Runtime GetCaps mit D3DDDICAPS_GETCERTIFICATE aufruft .
D3DDDICAPS_GETCERTIFICATE
Die Runtime stellt einen Zeiger auf eine DDICERTIFICATEINFO-Struktur bereit, die das Zertifikat beschreibt, das der Treiber abrufen soll.
Für einen authentifizierten Kanal verwendet der Treiber das vorhandene OPM-Zertifikat , bei dem es sich um ein von Microsoft signiertes X.509-Zertifikat handelt.
Eine Anwendung kann das Zertifikat des Treibers abfragen, um die folgenden Informationen zu ermitteln:
Gibt an, ob der Treiber vertrauenswürdig ist.
Gibt an, ob der Treiber widerrufen wurde.
Der öffentliche Schlüssel des Treibers. Die Anwendung verwendet den öffentlichen Schlüssel des Treibers, um einen Sitzungsschlüssel für einen authentifizierten Kanal einzurichten, der für die Authentifizierung verwendet wird.
Ein Aufruf von GetCaps mit D3DDDICAPS_GETCERTIFICATE Set schlägt fehl, wenn für den direct3D 9-authentifizierten Kanal aufgerufen wird, da dieser Kanal kein Zertifikat oder eine Authentifizierung unterstützt.
Bei einer Kryptositzung gibt der Treiber sein Zertifikat für den angegebenen Kryptotyp zurück. Abhängig vom Kryptotyp und dem verwendeten Schlüsselaustausch kann ein Zertifikat verwendet werden oder nicht. Es ist auch möglich, dass verschiedene Kryptotypen unterschiedliche Zertifikate verwenden können.
Optionale Inhaltsschutz-DDI-Funktionen
Der Treiber kann optional die folgenden Content Protection-DDI-Funktionen unterstützen:
Die EncryptionBlt-Funktion liest verschlüsselte Daten von einer geschützten Oberfläche.
Die GetPitch-Funktion ruft die Tonhöhe einer geschützten Oberfläche ab.
Die StartSessionKeyRefresh-Funktion gibt eine Zufallszahl zurück, die der Decoder/die Anwendung und der Treiber/die Hardware anschließend verwenden können, um einen exklusiven OR-Vorgang (XOR) mit dem Sitzungsschlüssel auszuführen.
Die Funktion FinishSessionKeyRefresh gibt an, dass alle Puffer ab diesem Zeitpunkt den aktualisierten Sitzungsschlüsselwert verwenden.
Die GetEncryptionBltKey-Funktion gibt den Schlüssel zurück, der zum Entschlüsseln der Daten verwendet wird, die die EncryptionBlt-Funktion des Treibers zurückgibt.
Die DecryptionBlt-Funktion schreibt Daten auf eine geschützte Oberfläche.
Inhaltsgeschützte Ressourcen
Die folgenden D3DDDI_RESOURCEFLAGS-Flags werden von der Direct3D-Runtime für geschützte Inhalte verwendet. Die Runtime legt diese D3DDDI_RESOURCEFLAGS Flags im Flags-Member der D3DDDIARG_CREATERESOURCE-Struktur fest, auf die der pResource-Parameter der CreateResource-Funktion des Treibers verweist, wenn die Runtime CreateResource aufruft.
RestrictedContent
Die Ressource kann geschützte Inhalte enthalten. Eine Anwendung kann den Inhaltsschutz explizit aktiviert haben, bevor die Anwendung eine Ressource erstellt. Der Treiber sollte sicherstellen, dass die Runtime die Zuordnung für die Ressource in einem Speicherpool platziert, der geschützt werden kann. Der Treiber sollte die Erstellung von sperrbaren geschützten Ressourcen ermöglichen. Der Treiber sollte jedoch explizit die Aufrufe seiner Lock-Funktion fehlschlagen, um diese Oberflächen zu sperren, während der Inhaltsschutz aktiviert ist.
RestrictSharedAccess
Nur bestimmte Prozesse sollten zugriff auf die freigegebene Ressource zugelassen werden.
Der Treiber sollte den freigegebenen Zugriff auf diese Ressource einschränken. Die Runtime kann nur die OpenResource-Funktion des Treibers aufrufen, um diese Ressource mit Anzeigegeräten (hDevice) innerhalb des Prozesses zu öffnen, der die Ressource erstellt hat, oder von den Geräten, denen explizit zugriff über den authentifizierten Kanal gewährt wurde.