Behandeln mehrerer Sperren
Mit der Direct3D-Runtime können Sie zulassen, dass Vertex- und Indexpuffer mehr als eine Sperre ausstehen. Anzeigetreiber im Benutzermodus müssen mehrere Sperren auf die gleiche Weise wie die Runtime im Windows 2000-Anzeigetreibermodell behandeln.
Ein Benutzermodusanzeigetreiber darf bei einem Aufruf seiner LockAsync-Funktion für eine Ressource, die bereits gesperrt ist, nicht fehlschlagen. Das heißt, der Treiber kann keine Aufrufe seiner LockAsync-Funktion für eine bestimmte Ressource fehlschlagen, nachdem der erste Aufruf der LockAsync-Funktion diese Ressource erfolgreich gesperrt hat. Ebenso kann der Treiber keine Aufrufe seiner Lock-Funktion für eine bestimmte Ressource fehlschlagen, nachdem der erste Aufruf seiner Lock-Funktion erfolgreich diese Ressource gesperrt hat. Die Runtime gleicht jeden Aufruf der LockAsync-Funktion des Treibers mit einem Aufruf der UnlockAsync-Funktion des Treibers ab. Die Runtime gleicht auch jedem Aufruf der Lock-Funktion des Treibers mit einem Aufruf der Entsperrfunktion des Treibers ab.
Der Benutzermodusanzeigetreiber kann keinen Fehler bei einem Aufruf seiner UnlockAsync-Funktion ausführen, es sei denn, die Ressource, die die D3DDDIARG_UNLOCKASYNC Struktur beschreibt, wurde durch einen vorherigen Aufruf der LockAsync-Funktion des Treibers nicht tatsächlich gesperrt. Ebenso kann der Treiber keinen Fehler bei einem Aufruf seiner Unlock-Funktion ausführen, es sei denn, die Ressource, die die D3DDDIARG_UNLOCK Struktur beschreibt, wurde nicht tatsächlich durch einen vorherigen Aufruf der Lock-Funktion des Treibers gesperrt. In Situationen, in denen die Ressourcen zuvor nicht gesperrt waren, geben UnlockAsync und Unlock E_INVALIDARG zurück.