Statisk uppräkning

statisk uppräkning är en drivrutins förmåga att identifiera och rapportera förekomsten av enheter under systeminitieringen, med begränsad möjlighet att rapportera efterföljande ändringar i systemets konfiguration.

Bussdrivrutiner kan använda statisk uppräkning om antalet och typen av enheter eller funktionella underenheter är förutbestämda och permanenta och inte är beroende av konfigurationen av det system som drivrutinen körs på.

Till exempel kan ett ljudkorts drivrutin fungera som busschaufför och skapa separata fysiska enhetsobjekt (PDOs) för var och en av kortets funktioner, till exempel MIDI, ljud och joystick.

Statisk barnlistor

Ramverket gör det möjligt för drivrutiner att stödja statisk uppräkning genom att tillhandahålla statiska underordnade listor. Varje statisk barnlista representerar en lista över barnenheter som är anslutna till en föräldraenhet. Bussdrivrutinen för den överordnade enheten måste identifiera den överordnade enhetens underordnade enheter, lägga till dem i den överordnade enhetens statiska underordnade lista och skapa en PDO för varje underordnad enhet.

Skapa en statisk barnlista

Varje gång en drivrutin skapar ett ramverksenhetsobjekt som representerar ett funktionellt enhetsobjekt (FDO) för en enhet skapar ramverket en tom, statisk underordnad lista för enheten.

När ramverket anropar en busschaufförs EvtDriverDeviceLägg till återanropsfunktion måste återanropsfunktionen anropa WdfDeviceSkapa för att skapa en FDO för den överordnade enheten. Mer information om hur du skapar en FDO finns i Skapa enhetsobjekt i en funktionsdrivrutin.

Drivrutinen måste sedan räkna upp den överordnade enhetens barnenheter, skapa PDO:er för barnenheterna och lägga till barnenheterna i barnenhetslistan.

Alternativt kan drivrutinen anropa WdfDeviceSetBusInformationForChildren för att tillhandahålla ramverket med information om bussen. Det rekommenderas eftersom det gör det enklare för underordnade enheter och appar att identifiera bussen.

Om du vill skapa en PDO för en identifierad underordnad enhet måste busschauffören:

  1. Anropa WdfPdoInitAllocate för att hämta en WDFDEVICE_INIT struktur.

  2. Initiera strukturen WDFDEVICE_INIT.

  3. Anropa WdfDeviceSkapa för att skapa ett ramverksenhetsobjekt som representerar en PDO.

Mer information om hur du skapar en PDO finns i Skapa enhetsobjekt i en bussdrivrutin.

När du har anropat WdfDeviceCreatemåste drivrutinen anropa WdfFdoAddStaticChild för att lägga till den underordnade enheten i den underordnade listan.

Ändra en statisk underslista

Eftersom drivrutiner endast ska använda statiska underordnade listor för enhetskonfigurationer som är förutbestämda och permanenta, finns det lite behov av att en drivrutin ändrar en statisk underordnad lista när den har skapats. Om drivrutinen fastställer att en barnenhet har blivit otillgänglig kan drivrutinen anropa WdfPdoMarkMissing. (Om en underordnad enhet förblir tillgänglig men inte svarar och inte kan användas bör drivrutinen ange Failed medlem i WDF_DEVICE_STATE-strukturen till WdfTrue- och sedan anropa WdfDeviceSetDeviceState.)

Gå igenom en statisk barnlista

Om du behöver hämta innehållet i en statisk underlista kan drivrutinen gå igenom listan genom att göra följande:

  1. Anropar WdfFdoLockStaticChildListForIteration.

  2. Anropa WdfFdoRetrieveNextStaticChild så många gånger som behövs.

  3. Anropar WdfFdoUnlockStaticChildListFromIteration.