Dela via


ACX-enhetsuppräkning

I det här avsnittet beskrivs ACX-enhetsuppräkning, start och avstängning samt ombalansering av enheter. En allmän översikt över ACX finns i översikten över ACX-ljudklasstillägg. Information om ACX-energisparfunktioner och PnP finns i ACX-energisparfunktioner.

ACX-enhetsuppräkning och start för statiska ljudenheter

Om du vill veta mer om hur ACX-start fungerar beskrivs följande scenario.

  • En ljudenhet representeras av en enda krets.
  • En livslängd för ljud/krets är kopplad till PnP-enhetens livslängd.
  • En enda enhet kan skapa flera kretsar för olika ljudenheter.
  • KMDF kernellägesmiljö.

Startsekvensen är:

ACX Stream-tillägg

  • ACX Stream Add (instans) på ACX Circuit (ACX-återanrop på ACX-kretsar) – anropas när som helst efter att WDF:s självhanterade I/O-initialisering eller omstart har anropats och enheten är i D0. Kretsspecifik
    • Indata: AcxStreamInit-kontext, ACXCIRCUIT.
    • Lägg till återanrop.
    • Skapa en AcxStream (instans).
    • Du kan valfritt göra en instansinitialisering efter dataströmmen.
    • Vid retur aktiverar ACX denna ströminstans, och eftersom det i det här scenariot är den enda på ljudbanan tillåter den strömmade meddelanden att passera.

ACX-enhetsuppräkning och start för dynamiska ljudenheter

I det här scenariot antas följande.

  • Stöd för dynamiskt ljud (skapa/ta bort ljudenheter vid körning).
  • Enhetens livslängd är inte kopplad till kretslivslängden.
  • En enda enhet kan skapa flera kretsar för olika ljudenheter.
  • Rider på det enkla statiska mönster som beskrivs ovan genom att bara lägga till element som är specifika för det dynamiska mönstret.
  • Använder härledda obehandlade PDO:er.
  • KMDF-miljö i kärnläge.

Startsekvensen för det här scenariot är:

  • WDM DriverEntry. Drivrutinsomfång.

    • Initiera spårning.
    • Du kan välja att registrera dig för avlastning
    • Skapa WDFDRIVER.
    • Ring ACX för att utföra postdrivrutinsinitiering.
    • Du kan eventuellt utföra någon initiering efter drivrutinen.
  • WDF-enhetLägg till. Begränsad till enhet

    • Anropa ACX för att ange enhetens init-kontext.
    • Skapa enhet.
    • Kontakta ACX för att utföra något efter enhetsinitiering.
    • Valfritt göra något efter enhetsinitiering.
  • WDF PrepareHardware. Enhetsspecifikt.

    • Skapa och initiera maskinvaruresurser för avbrott och trådar, och registrera dem med ACX.
  • Återanrop till WDF-enhet D0 Entry. Begränsad till enhet.

  • WDF-köer startas om.

  • WDF DeviceSelfManagedIoInit. Enhetsbegränsad

  • WDF DeviceSelfManagedIoRestart. Begränsad till en enhet.

    • Initiera efter varje uppstart från Dx.

Dynamiskt skapande av kretsar (när som helst)

  • Drivrutinen allokerar en WDFDEVICE_INIT struktur genom att anropa WdfPdoInitAllocate. Drivrutinen ansvarar för att anropa WdfDeviceInitFree- om den stöter på några fel innan den framgångsrikt skapar en enhet.
  • Drivrutinen anger vilka PnP- och strömåteranrop den vill ta emot.
  • Drivrutinen skapar en enhet.
  • Drivrutinen instansierar den nya enheten/kretsen genom att anropa AcxDeviceAddCircuitDevice.
  • WDF/PnP tar över och det enkla uppräknings-/startmönstret som beskrivs i föregående avsnitt inträffar.

AcxFactoryCircuit

En ACX-drivrutin kan också skapa AcxFactoryCircuit-objekt (kretsproviders) under uppstartssekvensen med hjälp av funktionen AcxFactoryCircuitCreate och funktionen AcxDeviceAddFactoryCircuit.

Eftersom ACX-drivrutinen registrerade sig med ACX som kretsfabrik använder ACX-ramverket den registrerade fabriken för att be drivrutinen att skapa en ny krets.

AcxFactoryCircuitCreate(Device, &attributes, &factoryInit, &factory);

AcxDeviceAddFactoryCircuit(Device, factory);

ACX-enhetens ombalansering

Ombalansering görs när systemresursanvändningen kräver att operativsystemet balanserar om resurser mellan enheter. Allmän information om ombalansering finns i Implementera PnP-ombalansering för PortCls-ljuddrivrutiner.

ACX stöder ombalansering av enheter enligt följande:

  • I nedstängningssekvensen för WDF/ACX frigör drivrutinen alla resurser för strömning (EvtAcxStreamPowerDown, EvtAcxStreamReleaseHardware), kretsresurser (EvtAcxCircuitPowerDown, EvtAcxCircuitReleaseHardware) och enhetsresurser (EvtDeviceReleaseHardware).

  • Alla begäranden läggs till och handtagen lämnas öppna.

  • I uppstartssekvensen för WDF/ACX säkerställer drivrutinen att de nya resurserna är kompatibla med de aktuella och utför alla tillåtna justeringar i inställningarna. Om resurserna inte är kompatibla med den aktuella enhets-/kretsinitieringen måste drivrutinen ta bort de aktuella kretsarna och skapa nya. Se mer information nedan.

  • I power up-sekvensen anropar WDF sin EvtDevicePrepareHardware-- och EvtDeviceD0-post, och ACX anropar motsvarande EvtAcxCircuitPrepareHardware och EvtAcxCircuitPowerUp och flyttar alla strömmar till sina befintliga tillstånd.

  • Så snart köerna växlar till ett påslaget/driftläge, flödar I/O igen.

ACX tillåter inte borttagning (misslyckas med frågeborttagning) eller ombalansering (misslyckas med frågestopp) om det finns strömmar i aktivt tillstånd (RUN).

Drivrutiner kan också välja att alltid förstöra och återskapa ljudenheter vid ombalansering. Det här är samma scenario ovan när enheten upptäcker att de nya inställningarna inte är kompatibla med de gamla. Borttagningen av kretsen måste göras i EvtDevicePrepareHardware/EvtDeviceReleaseHardware-återanrop och den nya kretsen skapas på nytt i EvtDevicePrepareHardware. Drivrutinen tar bort en krets genom att avregistrera kretsen (med hjälp av AcxDeviceRemoveCircuit). Fabrikskretsar bör normalt inte tas bort vid ombalansering.

Användarlägesfilhandtag

ACX väntar inte på att filhandtagen i användarläge ska stängas innan nya kretsar återskapas. Livslängden för filsystemshandtagen är inte kopplad till livslängden för de maskinvaruresurser som används av enheten eller kretsarna. Det är klienternas ansvar att lyssna efter gränssnittets ankomst och borttagning och att stänga och öppna filhandtag på nytt.

Gamla filreferenser har markerats som föråldrade och ACX misslyckas med alla I/O-begäranden som är associerade med dem.

Se även

översikt över ACX-ljudklasstillägg

ACX-referensdokumentation

PnP- och Power Management-återanropssekvenser