IO_CSQ_RELEASE_LOCK Rückruffunktion (wdm.h)

Die CsqReleaseLock-Routine wird vom System verwendet, um die mit CsqAcquireLock erworbene 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 abbruchsichere IRP-Warteschlange.

[in] Irql

Gibt eine IRQL an. Dies ist der Wert, der von CsqAcquireLock gespeichert wurde, als die Sperre abgerufen wurde.

Rückgabewert

Keine

Bemerkungen

Der Treiber gibt die CsqReleaseLock-Routine für eine abbruchsichere IRP-Warteschlange an, wenn die IO_CSQ Struktur der Warteschlange initialisiert wird. Der Treiber gibt die Routine als CsqReleaseLock-Parameter von IoCsqInitialize oder IoCsqInitializeEx an, wenn er IO_CSQ initialisiert. Weitere Informationen finden Sie unter Cancel-Safe IRP-Warteschlangen.

Das System ruft diese Funktion auf, um eine Sperre freizugeben, die mit CsqAcquireLock abgerufen wurde.

Wenn der Treiber eine Spinsperre verwendet, um die Sperrung für die Warteschlange zu implementieren, muss er die aktuelle IRQL speichern, wenn er die Sperre abruft, und den gespeicherten IRQL bereitstellen, wenn er die Sperre loslässt. Die CsqAcquireLock-Routine speichert den aktuellen IRQL, und das System übergibt den gespeicherten Wert als Irql-Parameter an CsqReleaseLock. Andernfalls kann der Treiber den Irql-Parameter ignorieren. Informationen zu Spinsperren finden Sie unter Spin Locks.

Treiber können einen beliebigen Sperrmechanismus verwenden, um die Warteschlange zu sperren, z. B. Mutexe. Weitere Informationen zu Mutexes finden Sie unter Mutex-Objekte.

Beispiele

Um eine CsqReleaseLock-Rückrufroutine zu definieren, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der von Ihnen definierten Rückrufroutine identifiziert. Windows bietet eine Reihe von Rückruffunktionstypen für Treiber. Das Deklarieren einer Funktion mithilfe der Rückruffunktionstypen hilft der Codeanalyse für Treiber, der statischen Treiberüberprüfung (Static Driver Verifier , SDV) und anderen Überprüfungstools, Fehler zu finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.

Um beispielsweise eine CsqReleaseLock-Rückrufroutine mit dem Namen MyCsqReleaseLockzu definieren, verwenden Sie den typ IO_CSQ_RELEASE_LOCK, 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 ist in der Headerdatei Wdm.h definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, fügen Sie die _Use_decl_annotations_ Anmerkung ihrer Funktionsdefinition hinzu. Die _Use_decl_annotations_ Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den IO_CSQ_RELEASE_LOCK Funktionstyp in der Headerdatei angewendet 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 (einschließlich Wdm.h, Ntddk.h, Ntifs.h)

Weitere Informationen

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqRemoveIrp

IO_CSQ

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoCsqRemoveNextIrp