Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die CsqReleaseLock Routine wird vom System verwendet, um die mit CsqAcquireLockerworbene Sperre freizugeben.
Syntax
IO_CSQ_RELEASE_LOCK IoCsqReleaseLock;
VOID IoCsqReleaseLock(
[in] PIO_CSQ Csq,
[in] KIRQL Irql
)
{...}
Parameter
[in] Csq
Zeiger auf die IO_CSQ-Struktur für die Warteschlange mit abbruchsicheren IRP-Adressen.
[in] Irql
Gibt eine IRQL an. Dies ist der Von CsqAcquireLock gespeicherte Wert, wenn die Sperre abgerufen wurde.
Rückgabewert
Nichts
Bemerkungen
Der Treiber gibt die CsqReleaseLock- Routine für eine abbruchsichere IRP-Warteschlange an, wenn sie die IO_CSQ Struktur der Warteschlange initialisiert. Der Treiber gibt die Routine als CsqReleaseLock Parameter von IoCsqInitialize oder IoCsqInitializeEx an, wenn er IO_CSQinitialisiert. Weitere Informationen finden Sie unter Cancel-Safe IRP Queues.
Das System ruft diese Funktion auf, um eine Sperre freizugeben, die mit CsqAcquireLockabgerufen wurde.
Wenn der Treiber eine Drehungssperre zum Implementieren der Sperre für die Warteschlange verwendet, muss er die aktuelle IRQL speichern, wenn sie die Sperre erhält, und die gespeicherte IRQL bereitstellen, wenn sie die Sperre loslässt. Die CsqAcquireLock- Routine speichert die aktuelle IRQL, und das System übergibt den gespeicherten Wert als Irql Parameter an CsqReleaseLock. Andernfalls kann der Treiber den Irql Parameter ignorieren. Informationen zu Drehsperren finden Sie unter Spin Locks.
Treiber können jeden Sperrmechanismus verwenden, um die Warteschlange zu sperren, z. B. Mutexes. Weitere Informationen zu Mutexes finden Sie unter Mutex Objects.
Beispiele
Um eine CsqReleaseLock Rückrufroutine zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der von Ihnen definierten Rückrufroutine identifiziert. Windows stellt eine Reihe von Rückruffunktionstypen für Treiber bereit. Durch das Deklarieren einer Funktion mithilfe der Rückruffunktionstypen können Codeanalyse für Treiber, statische Treiberüberprüfung (SDV) und andere Überprüfungstools Fehler finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.
Wenn Sie beispielsweise eine CsqReleaseLock- Rückrufroutine definieren möchten, die MyCsqReleaseLockheißt, verwenden Sie den IO_CSQ_RELEASE_LOCK Typ, wie in diesem Codebeispiel gezeigt:
IO_CSQ_RELEASE_LOCK MyCsqReleaseLock;
Implementieren Sie dann Ihre Rückrufroutine wie folgt:
_Use_decl_annotations_
VOID
MyCsqReleaseLock(
PIO_CSQ Csq,
KIRQL Irql
)
{
// Function body
}
Der IO_CSQ_RELEASE_LOCK Funktionstyp wird in der Wdm.h-Headerdatei definiert. Um Fehler genauer zu identifizieren, wenn Sie die Codeanalysetools ausführen, müssen Sie der Funktionsdefinition die _Use_decl_annotations_ Anmerkung hinzufügen. Die _Use_decl_annotations_ Anmerkung stellt sicher, dass die Anmerkungen, die auf den IO_CSQ_RELEASE_LOCK Funktionstyp in der Headerdatei angewendet werden, verwendet werden. Weitere Informationen zu den Anforderungen für Funktionsdeklarationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für WDM-Treiber. Informationen zu _Use_decl_annotations_finden Sie unter Annotating Function Behavior.
Anforderungen
| Anforderung | Wert |
|---|---|
| Zielplattform- | Desktop |
| Header- | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |