Delen via


Audiostuurprogrammaobjecten maken

In de gebruikersmodus worden COM-objecten gemaakt met behulp van een functie zoals CoCreateInstance (beschreven in de Microsoft Windows SDK-documentatie), waarbij de client niet weet hoe het geheugen dat voor het object is vereist, wordt toegewezen. In de kernelmodus is echter een andere methode voor het maken van objecten nodig, waarbij de toewijzing van het geheugen doorgaans nauw wordt beheerd.

Het audiostuurprogrammamodel maakt gebruik van het concept van de COM-interface, zoals gedefinieerd door de IUnknown-interface . Audiostuurprogramma's zijn echter niet vereist voor toegang tot het register of voor het gebruik van mechanismen zoals in-processervers. Miniportstuurprogramma's zijn niet vereist om aggregatie te ondersteunen.

Volgens de conventie heeft de functie die wordt gebruikt om een bepaalde klasse objecten te maken altijd dezelfde vorm:

NTSTATUS CreateMyObject(
   OUT PUNKNOWN  *Unknown,
   IN REFGUID ClassId,
   IN PUNKNOWN OuterUnknown OPTIONAL,
   IN POOL_TYPE PoolType
 );

Parameters

Onbekend
Pointer naar een pointer naar een IUnknown-interface. De functie voert een verwijzing naar het zojuist gemaakte object uit via Onbekend.

ClassId
Hiermee geeft u de klasse-GUID, die als referentie wordt doorgegeven. Deze parameter wordt alleen gebruikt als de functie objecten van meerdere klassen maakt. Anders is deze ingesteld op NULL.

OuterUnknown
Hiermee geeft u de IUnknown-interface op voor het samenvoegen van het nieuwe object. Deze parameter kan worden ingesteld op NULL om aan te geven dat er geen aggregatie vereist is.

PoolType
Hiermee geeft u het type geheugengroep waaruit het object moet worden toegewezen (zie POOL_TYPE).

De eerste drie parameters zijn identiek aan de parameters van de functie COM CoCreateInstance . Zie de functie CreateMiniportMidiFM in het Fmsynth-voorbeeldaudiostuurprogramma in de Microsoft Windows Driver Kit (WDK) voor een voorbeeld van een functie voor het maken van dit type.

Een andere conventie is het leveren van een nieuwexxx-functie voor een klasse. Dergelijke functies bieden een eenvoudige manier om een object te instantiëren (maken en initialiseren), zoals wordt weergegeven in het volgende voorbeeld:

NTSTATUS NewMyObject(
 OUT PMYINTERFACE  *InterfacePointer,
 IN PUNKNOWN  OuterUnknown OPTIONAL,
 IN POOL_TYPE  PoolType,
  // ...more parameters
 );

Met de functie NewMyObject wordt een object gemaakt en geïnitialiseerd en wordt vervolgens een aanwijzer teruggegeven aan de interface. Omdat de initialisatieparameters klassespecifiek zijn, is dit het prototype van een nieuwexxx-functie . De functie NewXxx biedt handige toegang tot de constructor voor het object.

Zie PcNewDmaChannel voor een voorbeeld van een nieuwexxx-functie van dit type.