IMiniportWavePci::NewStream, méthode (portcls.h)

La NewStream méthode crée une nouvelle instance d’un flux logique associé à un canal physique spécifié.

Syntaxe

NTSTATUS NewStream(
  [out]          PMINIPORTWAVEPCISTREAM *Stream,
  [in, optional] PUNKNOWN               OuterUnknown,
  [in]           POOL_TYPE              PoolType,
  [in]           PPORTWAVEPCISTREAM     PortStream,
  [in]           ULONG                  Pin,
  [in]           BOOLEAN                Capture,
  [in]           PKSDATAFORMAT          DataFormat,
  [out]          PDMACHANNEL            *DmaChannel,
  [out]          PSERVICEGROUP          *ServiceGroup
);

Paramètres

[out] Stream

Pointeur de sortie pour le nouveau flux. Ce paramètre pointe vers une variable de pointeur allouée à l’appelant dans laquelle la méthode écrit un pointeur dans l’interface IMiniportWavePciStream de l’objet de flux. L’appelant spécifie un pointeur valide non NULL pour ce paramètre.

[in, optional] OuterUnknown

Pointeur vers l’interface IUnknown d’un objet qui doit agréger l’objet de flux. Ce paramètre est facultatif. Si l’agrégation n’est pas requise, l’appelant spécifie ce paramètre comme NULL.

[in] PoolType

Spécifie le type de pool de mémoire à partir duquel le stockage de l’objet de canal DMA doit être alloué. Ce paramètre est l’un des types de pool nonpage définis dans l’énumération POOL_TYPE .

[in] PortStream

Pointeur vers l’interface IPortWavePciStream de l’objet de flux du pilote de port.

[in] Pin

Spécifie un ID d’épingle identifiant l’épingle à ouvrir. Si le descripteur de filtre du pilote WavePci spécifie un total de fabriques de broches sur le filtre, les valeurs valides du paramètre Pin sont comprises dans la plage 0 à n-1.

[in] Capture

Spécifie s’il faut créer un flux de capture ou un flux de rendu. Ce paramètre est TRUE pour un canal de capture (entrée) et FALSE pour un canal de lecture (sortie).

[in] DataFormat

Pointeur vers une structure KSDATAFORMAT qui spécifie le format de données du flux.

[out] DmaChannel

Pointeur de sortie pour le canal DMA. Ce paramètre pointe vers une variable de pointeur allouée à l’appelant dans laquelle la méthode écrit un pointeur dans l’objet IDmaChannel du flux. L’appelant spécifie un pointeur valide non NULL pour ce paramètre.

[out] ServiceGroup

Pointeur de sortie pour le groupe de services. Ce paramètre pointe vers une variable de pointeur allouée par l’appelant dans laquelle la méthode écrit un pointeur dans l’interface IServiceGroup de l’objet de groupe de services du flux. Il s’agit du groupe de services inscrit pour la notification d’interruption. L’appelant spécifie un pointeur valide non NULL pour ce paramètre.

Valeur de retour

NewStream retourne STATUS_SUCCESS si l’appel a réussi. Sinon, la méthode retourne un code d’erreur approprié.

Remarques

La NewStream méthode définit l’état initial du flux sur KSSTATE_STOP et sa position initiale sur zéro. (Voir IMiniportWavePciStream::SetState et IMiniportWavePciStream::GetPosition.)

Le paramètre DataFormat , qui spécifie le format de données du flux, pointe vers l’une des versions audio spécifiques et étendues suivantes de la structure KSDATAFORMAT :

KSDATAFORMAT_WAVEFORMATEX

KSDATAFORMAT_DSOUND

Si le pilote miniport ne fournit pas de pointeur de groupe de services (autrement dit, si l’appel NewStream génère NULL via le pointeur ServiceGroup ), le pilote de port configure son propre minuteur périodique à la place pour traiter la position du flux et les événements d’horloge. La période de ce minuteur est actuellement de 20 millisecondes, mais la période peut changer dans les implémentations futures.

Les paramètres Stream, OuterUnknown, PortStream et ServiceGroup suivent les conventions de comptage de référence pour les objets COM.

Notez qu’il NewStream ne suit pas les conventions de comptage de référence habituelles dans sa gestion du pointeur qu’il génère via le paramètre DmaChannel OUT. Lorsque le pilote de port se termine à l’aide des références qu’il reçoit via les autres paramètres OUT de la NewStream méthode, Stream et ServiceGroup, il les libère, comme prévu. En revanche, le pilote de port n’utilise jamais le pointeur DmaChannel qu’il reçoit à partir de l’appel NewStream et qu’il n’appelle jamais Release sur l’objet DmaChannel .

L’exemple de pilote audio ac97 dans le Kit de pilotes Microsoft Windows (WDK) reflète ce comportement. L’implémentation de cet IMiniportWavePci::NewStream exemple de méthode appelle AddRefsur stream etServiceGroup fait référence à celle-ci, mais pas à la référence DmaChannel . Ce comportement est conservé pour la compatibilité descendante.

Notez que les NewStream méthodes des autres types de ports (WaveCyclique, en particulier) suivent les conventions de comptage de référence habituelles pour tous leurs paramètres OUT.

Configuration requise

   
Plateforme cible Universal
En-tête portcls.h (include Portcls.h)
IRQL PASSIVE_LEVEL

Voir aussi

IDmaChannel

IMiniportWavePci

IMiniportWavePciStream

IPortWavePciStream

IServiceGroup

KSDATAFORMAT

KSDATAFORMAT_DSOUND

KSDATAFORMAT_WAVEFORMATEX

POOL_TYPE