IMiniportWaveRTStream::AllocateAudioBuffer-Methode (portcls.h)

Die AllocateAudioBuffer-Methode weist einen zyklischen Puffer für Audiodaten zu.

Syntax

NTSTATUS AllocateAudioBuffer(
  ULONG               RequestedSize,
  PMDL                *AudioBufferMdl,
  ULONG               *ActualSize,
  ULONG               *OffsetFromFirstPage,
  MEMORY_CACHING_TYPE *CacheType
);

Parameter

RequestedSize

Gibt die angeforderte Größe des Audiopuffers in Bytes an.

AudioBufferMdl

Ausgabezeiger für eine Speicherdeskriptorliste (Memory Descriptor List, MDL), die den Audiopuffer beschreibt. Dieser Parameter verweist auf eine vom Aufrufer zugewiesene Zeigervariable, in die die Methode einen Zeiger auf die MDL schreibt. Allgemeine Informationen zu Windows-Kernel-MDLs finden Sie unter Verwenden von MDLs.

ActualSize

Ausgabezeiger für die tatsächliche Größe des zugeordneten Puffers in Bytes. Dieser Parameter verweist auf eine ULONG-Variable, in die die Methode den Größenwert schreibt.

OffsetFromFirstPage

Ausgabezeiger für den Offset des Puffers in Bytes vom Anfang der ersten Seite in der MDL. Dieser Parameter verweist auf eine vom Aufrufer zugewiesene ULONG-Variable, in die die Methode den Offsetwert schreibt.

CacheType

Gibt den Typ der Zwischenspeicherung an, die der Client für den Audiopuffer anfordert. Dieser Parameter ist ein MEMORY_CACHING_TYPE Enumerationswert. Weitere Informationen finden Sie weiter unten im Abschnitt Hinweise.

Rückgabewert

Diese Methode gibt NTSTATUS zurück. AllocateAudioBuffer gibt STATUS_SUCCESS zurück, wenn der Aufruf erfolgreich war. Andernfalls gibt die Methode einen entsprechenden Fehler status Code zurück. In der folgenden Tabelle sind einige der möglichen Fehler status Codes aufgeführt.

Rückgabecode Beschreibung
STATUS_UNSUCCESSFUL Der Treiber unterstützt die angegebene Kombination von Pufferattributen nicht.
STATUS_INSUFFICIENT_RESOURCES Für die Zuweisung des Puffers ist nicht genügend Arbeitsspeicher verfügbar.
STATUS_DEVICE_NOT_READY Das Gerät ist nicht bereit.

Hinweise

Hinweis: Miniports für Intel High Definition Audio Codecs müssen einen CacheType von MmWriteCombined angeben, um die Cachekohärenz sicherzustellen. Dies liegt daran, dass der Intel High Definition Audio Controller möglicherweise für den Nicht-Snoop-Betrieb konfiguriert ist.

Nach dem Empfang einer KSPROPERTY_RTAUDIO_BUFFER-Anforderung vom Client ruft der Porttreiber die Methode AllocateAudioBuffer auf, um einen zyklischen Puffer zuzuweisen, den der Porttreiber später dem virtuellen Adressraum des Clients zuordnen kann.

Während des Aufrufs von AllocateAudioBuffer weist der Miniporttreiber den zyklischen Puffer zu, indem er entweder IPortWaveRTStream::AllocatePagesForMdl oder IPortWaveRTStream::AllocateContiguousPagesForMdl aufruft. Der Miniporttreiber programmiert auch die Audiohardware für die Wiedergabe von oder Aufzeichnung in diesem Puffer, aber er startet die DMA-Übertragungen erst, wenn der Porttreiber IMiniportWaveRTStream::SetState mit State=KSSTATE_RUN aufruft. Die Ausgabeparameter der AllocateAudioBuffer-Methode umfassen die MDL für den Audiopuffer, die tatsächliche Größe des vom Treiber zugewiesenen Puffers und den Offset des Startes des Puffers vom Anfang der ersten Seite in der MDL.

RequestedSize ist ein Eingabeparameter, der die Größe angibt, die der Client für den Audiopuffer anfordert. ActualSize ist ein Ausgabeparameter, der die tatsächliche Größe des Audiopuffers angibt.

Das Audiogerät erfordert möglicherweise, dass der Audiopuffer an Beispielgrenzen beginnt und endet oder andere Arten von hardwareabhängigen Ausrichtungseinschränkungen erfüllt. Wenn genügend Arbeitsspeicher verfügbar ist, ist die tatsächliche Größe des Puffers die angeforderte Größe, die auf das nächste Beispiel oder eine andere hardwarebeschränkte Grenze gerundet (nach oben oder unten) gerundet ist. Die tatsächliche Größe muss mindestens die angeforderte Größe sein. Andernfalls verwendet die Audiositzungs-API (WASAPI) den Puffer nicht, und die Streamerstellung schlägt fehl.

Anforderungen

Anforderung Wert
Header portcls.h
IRQL PASSIVE_LEVEL

Weitere Informationen

IMiniPortWaveRTStream