Freigeben über


IPortWavePciStream::ReleaseMapping-Methode (portcls.h)

Die ReleaseMapping-Methode gibt eine Zuordnung frei, die durch einen vorherigen Aufruf von IPortWavePciStream::GetMappingabgerufen wurde.

Syntax

NTSTATUS ReleaseMapping(
  [in] PVOID Tag
);

Parameter

[in] Tag

Gibt einen Tagwert an, der die Zuordnung angibt, die freigegeben werden soll. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

Rückgabewert

ReleaseMapping gibt STATUS_SUCCESS zurück, wenn der Anruf erfolgreich war. Andernfalls gibt die Methode einen geeigneten Fehlercode zurück.

Bemerkungen

Legen Sie den Tag Parameter auf denselben Tagwert fest, den Sie zum Identifizieren der Zuordnung im Aufruf von IPortWavePciStream::GetMapping verwendet haben, die ursprünglich die Zuordnung abgerufen haben.

Der Miniporttreiber muss die Reihenfolge nachverfolgen, in der er seine Zuordnungen von Aufrufen zu IPortWavePciStream::GetMappingabruft und die Zuordnungen in derselben Reihenfolge freigeben muss.

Um potenzielle Deadlocks zu vermeiden, muss der Miniporttreiber vermeiden, während des Aufrufs von ReleaseMappingeine Drehsperre zu halten. Im Ac97-Beispielaudiotreiber im Microsoft Windows Driver Kit (WDK) finden Sie ein Codebeispiel, das eine Drehsperre zum Serialisieren des Zugriffs auf freigegebene Datenstrukturen und Peripheriegeräte in einem Multiprozessorsystem verwendet. Der Beispielcode ruft KeReleaseSpinLock- auf, bevor ReleaseMapping aufgerufen und KeAcquireSpinLock nach dem Aufrufen von ReleaseMappingaufgerufen wird. Zwischen den Aufrufen zum Freigeben und Abrufen der Drehsperre darf der Treiberthread nicht davon ausgehen, dass er exklusiven Zugriff auf die Daten oder Peripheriegeräte hat, die durch die Spin-Sperre geschützt sind. Das Tool "Driver Verifier" (siehe Beschreibung dieses Tools auf der Driver Verifier Website) überprüft während der Aufrufe von ReleaseMappingauf aktive Drehsperren; wenn eine erkannt wird, generiert sie eine 0xC4 (Deadlock-Erkennung) Fehlerüberprüfung.

Anforderungen

Anforderung Wert
Zielplattform- Universal
Header- portcls.h (include Portcls.h)
IRQL- <=DISPATCH_LEVEL

Siehe auch

IMiniportWavePciStream::RevokeMappings

IPortWavePciStream-

IPortWavePciStream::GetMapping

KeAcquireSpinLock

KeReleaseSpinLock