DXGKDDI_QUERYCURRENTFENCE Rückruffunktion (d3dkmddi.h)
Die DxgkDdiQueryCurrentFence Funktionsabfragen über den neuesten abgeschlossenen Übermittlungszaunbezeichner in der Hardwarebefehlsausführungseinheit.
Syntax
DXGKDDI_QUERYCURRENTFENCE DxgkddiQuerycurrentfence;
NTSTATUS DxgkddiQuerycurrentfence(
[in] IN_CONST_HANDLE hAdapter,
[in/out] INOUT_PDXGKARG_QUERYCURRENTFENCE pCurrentFence
)
{...}
Parameter
[in] hAdapter
Ein Handle zu einem Kontextblock, der einem Anzeigeadapter zugeordnet ist. Der Display-Miniporttreiber, der zuvor dieses Handle für das Microsoft DirectX-Grafikkernsubsystem im MiniportDeviceContext Ausgabeparameter des DxgkDdiAddDevice--Funktion bereitgestellt hat.
[in/out] pCurrentFence
Ein Zeiger auf eine DXGKARG_QUERYCURRENTFENCE Struktur, die Informationen zu den aktuellen Zaundaten enthält.
Rückgabewert
DxgkDdiQueryCurrentFence gibt STATUS_SUCCESS zurück oder ein entsprechendes Fehlerergebnis, wenn die Zaundaten nicht erfolgreich abgerufen wurden.
Bemerkungen
Ein Zaun ist eine Anweisung, die 64 Bit Daten und eine Adresse enthält. Der Display-Miniporttreiber kann einen Zaun in den DMA-Datenstrom (Direct Memory Access) einfügen, der an die Grafikverarbeitungseinheit (GPU) gesendet wird. Wenn die GPU den Zaun liest, schreibt die GPU die Zaundaten an der angegebenen Zaunadresse. Bevor die GPU die Zaundaten jedoch in den Arbeitsspeicher schreiben kann, muss sichergestellt werden, dass alle Pixel aus den Grundtypen, die vor der Zaunanweisung stehen, eingestellt und ordnungsgemäß in den Arbeitsspeicher geschrieben werden.
- reguläre Zäune sind Zäune, die in einen DMA-Puffer eingefügt werden können, der im Benutzermodus erstellt wird. Da der Inhalt eines DMA-Puffers aus dem Benutzermodus nicht vertrauenswürdig ist, müssen Zäune innerhalb eines solchen DMA-Puffers auf eine virtuelle Adresse im GPU-Kontextadressraum und nicht auf eine physische Adresse verweisen. Der Zugriff auf eine solche virtuelle Adresse ist an den gleichen Speicherüberprüfungsmechanismus gebunden wie jede andere virtuelle Adresse, auf die die GPU zugreift.
-
Privilegierte Zaune sind Zäune, die nur in einen DMA-Puffer eingefügt werden können, der (und nur zugänglich) im Kernelmodus erstellt wird. Zäune innerhalb eines solchen DMA-Puffers beziehen sich auf eine physische Adresse im Arbeitsspeicher.
Beachten Sie, dass, wenn auf die Zieladresse des Zauns im Benutzermodus zugegriffen werden kann, schadhafte Software einen Grafikvorgang über den Speicherspeicherort für den Zaun ausführen und daher den Inhalt des zu empfangenden Kernels außer Kraft setzen kann.
Wenn der Display-Miniporttreiber den letzten Zaun eines DMA-Puffers verpasst hat, wird möglicherweise die DxgkDdiQueryCurrentFence-Funktion aufgerufen, um den verpassten Zaun zu melden. Wenn die Hardware z. B. einen Zaun zum Arbeitsspeicher generiert, wird die DxgkDdiInterruptRoutine-Funktion ausgelöst, um den Speicher zu lesen. Wenn die Daten des Zauns jedoch nicht verfügbar sind, wenn der Fahrer versucht, die Daten zu lesen (z. B. wenn ein defekter Chipsatz vorhanden ist), wird der Zaun normalerweise beim nächsten Interrupt gemeldet, es sei denn, Unterbrechungen wurden angehalten. Wenn Unterbrechungen beendet wurden und das DirectX-Grafik-Kernel-Subsystem zu lange auf einen Zaun wartet, ruft das Subsystem die DxgkDdiQueryCurrentFence--Funktion auf, um den aktuellen Zaun zu überprüfen und alle ausstehenden Zaun zu ermitteln, die er möglicherweise verpasst hat.
Bevor der Anzeigeminiporttreiber von einem Aufruf an DxgkDdiQueryCurrentFencezurückgibt, muss der Treiber die DxgkCbNotifyInterrupt--Funktion aufrufen, um den Zaun zu melden. Um diese Funktionalität zu implementieren, führt der Treiber folgendes aus:
- Verfolgt, welcher Zaun zuletzt an das Betriebssystem gemeldet wurde.
- Löst IRQL auf Geräteunterbruch aus. Um IRQL zum Unterbrechen aufzuheben, kann der Treiber die DxgkCbSynchronizeExecution--Funktion aufrufen, um mit der DxgkDdiInterruptRoutine--Funktion zu synchronisieren.
- Bei geräteunterbrechen IRQL vergleicht der zuletzt gemeldete Zaun mit dem neuesten hardwaregeschlossenen Zaun.
- Bei Geräteunterbruch IRQL ruft DxgkCbNotifyInterrupt nur auf, wenn der neueste abgeschlossene Hardwarezaun neuer als der letzte gemeldete Zaun ist.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows Vista |
Zielplattform- | Desktop |
Header- | d3dkmddi.h (einschließlich D3dkmddi.h) |
IRQL- | PASSIVE_LEVEL |