Mellanstora GUID:er

Miniportdrivrutiner måste kunna stödja flera enheter. Eftersom komponenterna TV/radio tuner, TV-ljud, tvärlist och videoinspelning är uppdelade i olika kernel-strömningsfilter är en metod nödvändig för att korrekt beskriva de topologiska maskinvaruanslutningarna mellan dessa komponenter på enheten samt på flera enheter. Till exempel måste två byggda men inte köra filterdiagram som stöder FM-radio och TV-inspelning kunna samexistera. Minidrivers använder medier för att hantera dessa scenarier. Dessutom använder filtergrafskapande program, till exempel Graph Edit, medium under filtergrafkonstruktionen för att säkerställa att filtren för en enhet ansluter korrekt till filter på en annan enhet. Till exempel bör tunerfiltret för en enhet inte ansluta till korslistfiltret för en annan enhet.

En minidrivrutin beskriver medier med KSPIN_MEDIUM-strukturen som består av en GUID-datatypmedlem (Set) följt av två ULONG-medlemmar (Id och flaggor):

  • Set-medlemmen ska tilldelas GUID som representerar den topologiska maskinvaruanslutningen.

  • Minidrivern måste ange Id-medlemmen till ett unikt värde för enhetsinstansen.

  • Flags-medlemmen är reserverad för systemanvändning och ska vara inställd på noll.

För att säkerställa korrekt konstruktion av filterdiagram med flera enheter som finns i systemet förblir set-medlemmen i KSPIN_MEDIUM-strukturen densamma för varje enhetsinstans. Minidrivrutinen måste dock tilldela ett unikt värde till Id-medlemmen i KSPIN_MEDIUM-strukturen per enhetsinstans. Om ID-medlemmen inte anges till ett unikt värde uppstår problem när flera enheter finns i systemet. Om två enheter installeras i systemet måste minidrivrutinen ange medlemmen Id till ett unikt värde för varje enhetsinstans. Observera att ID-medlemmen för filter för enheter som finns på samma maskinvara, till exempel tuners och crossbars, måste vara densamma. En teknik för att säkerställa att ID-medlemmen skiljer sig mellan enhetsinstanser är att ha en global räknare i minidrivrutinen och öka räknaren under enhetens plug and play-starttid innan ID sätts till sitt värde.

Beroende på det kernelströmgränssnitt som minidrivrutinen följer (AVStream eller Stream-klassen) måste minidrivrutinen specificera värdet för Id-medlemmen på ett annat sätt.

  • Stream-klassens minidrivrutiner anger värdet vid bearbetning av SRB_GET_STREAM_INFO.

  • AVStream-minidrivrutiner specificerar värdet i KSPIN_DESCRIPTOR_EX-strukturen. Det finns två olika sätt för AVStream-minidrivrutiner att ange värdet i KSPIN_DESCRIPTOR_EX struktur:

    1. Ange statiska beskrivningar med en global ID-räknare och anropa _KsEdit under Lägg till eller Starta sändningshanterare för att ändra ID-medlemmen till ett unikt värde.

    2. Anropa KsCreateFilterFactory för att dynamiskt skapa filter-/pin-beskrivningarna under Lägg till eller Starta sändningshanterare.

Minidrivers måste också anropa en speciell funktion för att registrera sig med Microsoft DirectShow så att program automatiskt kan konstruera filterdiagram med TV/radio-tuner, TV-ljud och korslistfilter eftersom de faktiskt inte skapar kernelströmningsstift för sina indata och utdata. När minidrivern registrerar dessa filter bör den ställa in Id-medlemmen i KSPIN_MEDIUM-strukturen till ett unikt värde. Om minidrivrutinen inte anger Id-medlemmen i KSPIN_MEDIUM-strukturen till ett unikt värde kan automatiska diagramskapande program misslyckas med att läsa in nödvändiga intilliggande filter. Men manuell filter-graph-byggnad, till exempel i Graph Edit, kan fortfarande fungera.

Så här registrerar du en minidrivrutin med DirectShow:

Den KSPIN_MEDIUM-struktur som returneras från antingen SRB_GET_STREAM_INFO (för en Stream-klassminidriver) eller KSPIN_DESCRIPTOR_EX (för en AVStream-minidriver) måste matcha den KSPIN_MEDIUM-element som returneras i följande egenskaper:

Förutom att implementera medium och medelstora GUID:er på rätt sätt är det nödvändigt att följa andra riktlinjer för att säkerställa att processer kan fungera med flera filterdiagram. Minidrivrutinen får inte låsa några maskinvaruresurser förrän filterdiagrammet övergår till värdet KSSTATE_ACQUIRE i KSSTATE. Detta hjälper till att säkerställa att två byggda, men inte kör filterdiagram, kan samexistera utan att störa varandra.

Mer information om media, inklusive hur man implementerar dem, finns i AVStream Simulated Hardware Sample Driver (AVSHwS).

Anmärkning

När du härleder en ny minidriver från exempel i Windows Driver Kit (WDK), måste du generera nya GUID-värden för media för att återspegla enhetens unika maskinvarutopologi. Om du inte gör det kan mediet för en enhet kollidera med de medier som har definierats för en annan enhet.