Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel worden minidrivers en het HID-klassestuurprogramma beschreven.
Zie WDF HID minidrivers maken voor meer informatie.
Operationele functies van de HID-class driver
Het HID-klassestuurprogramma voert de volgende bewerkingen uit:
Biedt en beheert de interface op het hoogste niveau die kernelmodusstuurprogramma's en gebruikersmodustoepassingen gebruiken voor toegang tot de HID-verzamelingen die een invoerapparaat ondersteunt.
Het stuurprogramma voor de HID-klasse beheert en routeert alle communicatie tussen stuurprogramma's en toepassingen op hoger niveau en de onderliggende invoerapparaten die HID-verzamelingen ondersteunen. Het beheert de verschillende gegevensprotocollen die worden gebruikt door verschillende invoerapparaten en invoerwachtrijen die meer dan één geopend bestand in dezelfde HID-verzameling ondersteunen.
De interface op het hoogste niveau voor HID-verzamelingen bestaat uit de IOCTLs van het HID-klassestuurprogramma, de HIDClass-ondersteuningsroutines en de HIDClass-structuren.
Communiceert met een HID minidriver door de standaardstuurprogrammaroutines van de minidriver aan te roepen.
Hiermee maakt u een functioneel apparaatobject (FDO) voor HIDClass-invoerapparaten die zijn geïnventariseerd door een bus- of poortstuurprogramma op een lager niveau.
Het HID-klassestuurprogramma maakt en beheert bijvoorbeeld de bewerkingen van een FDO die een USB HID-apparaat vertegenwoordigt dat is geïnventariseerd door de door het systeem geleverde USB-stuurprogrammastack.
Biedt de functionaliteit van een busdriver voor de kindapparaten (HID-verzamelingen) die worden ondersteund door een onderliggend invoerapparaat.
Het HID-klassestuurprogramma maakt een fysiek apparaatobject (PDO) voor elke HID-verzameling die wordt ondersteund door een invoerapparaat en beheert de bewerking van de verzameling.
Een minidriver binden aan HIDClass
Een HID minidriver verbindt de bewerking met het HID-klassestuurprogramma door HidRegisterMinidriver aan te roepen om zichzelf te registreren bij het HID-klassestuurprogramma. De registratiebewerking:
Slaat een kopie van de invoerpunten (pointers) naar de standaard stuurprogrammaroutines van de HID-minidriver op in de apparaatextensie van het HID-stuurprogramma.
Een HID minidriver stelt de ingangspunten in het stuurprogrammaobject in dat de minidriver ontvangt als invoer voor de DRIVER_INITIALIZE routine. De HID-minidriver stelt deze toegangspunten in voordat hij wordt geregistreerd bij het HID-klasse-stuurprogramma.
Hiermee stelt u de toegangspunten in het stuurprogrammaobject van de minidriver opnieuw in op de toegangspunten voor de standaardstuurprogrammaroutines die door het HID-klassestuurprogramma worden geleverd.
De HID-klassedriver levert de volgende standaard stuurprogrammaroutines:
DRIVER_ADD_DEVICE en DRIVER_UNLOAD routines
Verzendroutines voor de volgende I/O-aanvragen:
Het registratieproces wijst ook geheugen toe voor de HID Mind River apparaatextensie. Hoewel het geheugen wordt toegewezen door het HID-klassestuurprogramma, gebruikt alleen de HID minidriver deze apparaatextensie.
Communiceren met een HID minidriver
Het HID-klassestuurprogramma communiceert als volgt met een HID-minidriver door de hid-minidriver-DRIVER_ADD_DEVICE, DRIVER_UNLOAD en verzendroutines als volgt aan te roepen:
De AddDevice-routine aanroepen
Wanneer de AddDevice-routine van het HID-klassestuurprogramma wordt aangeroepen om een functioneel apparaatobject (FDO) te maken, maakt het HID-klassestuurprogramma de FDO, initialiseert het en roept de HID minidriver AddDevice-routine aan. De HID minidriver AddDevice routine voert interne apparaatspecifieke initialisatie uit en retourneert, indien geslaagd, STATUS_SUCCESS. Als de HID minidriver AddDevice routine niet slaagt, verwijdert de HID class driver de FDO en retourneert de status van de HID minidriver AddDevice routine.
De routine voor het uitladen aanroepen
Wanneer de Unload routine van het HID-klassestuurprogramma wordt aangeroepen, maakt het HID-klassestuurprogramma het vrijgeven van alle middelen die aan de FDO verbonden zijn compleet en roept het de Unload routine van de HID-minidriver aan.
De dispatchroutines aanroepen
Om een apparaat te bedienen, roept het HID-klassestuurprogramma voornamelijk de HID minidriver-dispatchroutine aan voor interne aanvragen voor apparaatbeheer.
Wanneer de I/O-manager aanvragen verzendt naar het HID-klassestuurprogramma, verwerkt het HID-klassestuurprogramma de aanvraag en roept de bijbehorende verzendroutine van de HID minidriver aan.
Het HID-klassestuurprogramma verzendt niet de volgende aanvragen naar de HID minidriver: maken, sluiten of apparaatbeheer.
Werking van een HID minidriver
Een HID-transport minidriver abstraheert de werking van een hardwarebus of poort waaraan uw invoerapparaat is gekoppeld.
HID minidrivers kunnen worden gebouwd met behulp van een van de volgende frameworks:
- UMDF – Driver Framework voor gebruikersmodus
- KDMF – Kernel Mode Driver Framework
- WDF - Windows Driver Framework
- WDM – Windows Driver Model (verouderd)
Microsoft raadt aan een op frameworks gebaseerde oplossing (KMDF of UMDF) te gebruiken. Ga naar de volgende secties voor meer informatie over elk van de stuurprogrammamodellen:
- KMDF-gebaseerde HID minidriver, zie Op framework gebaseerde HID Minidrivers maken
- Op UMDF gebaseerde HID minidriver, zie WDF HID Minidrivers maken
In de volgende sectie wordt besproken hoe u een WDM-gebaseerde HID-minidriver registreert, maar veel daarvan is ook relevant voor een stuurprogramma op basis van KMDF Frameworks. Alle HID minidriver moet zich registreren bij het HID-klassestuurprogramma en het HID-klassestuurprogramma communiceert met de minidriver door de standaard stuurprogrammaroutines van de minidriver aan te roepen.
Zie de volgende secties voor meer informatie over de functionaliteit die een HID minidriver moet ondersteunen in de standaardstuurprogrammaroutines:
- Een HID-minidriver registreren
- HID minidriver-extensie
- De HID_DEVICE_EXTENSION-structuur gebruiken
- Standaard minidriver routines
Zie Operation of the HID minidriver voor meer informatie over het HID-klassestuurprogramma.
Een HID-minidriver registreren
Nadat een HID minidriver alle andere stuurprogramma initialisatie in zijn DRIVER_INITIALIZE routine heeft voltooid, verbindt de HID minidriver zijn bewerking aan het HID-klassestuurprogramma door HidRegisterMinidriver aan te roepen.
Wanneer de HID minidriver zich registreert bij het HID-klassestuurprogramma, gebruikt hij een HID_MINIDRIVER_REGISTRATION structuur. De structuur geeft het volgende op:
- De HID-revisie
- Het HID minidriver-stuurprogrammaobject
- De grootte van een HID-minidriver-apparaatextensie
- Of apparaten worden gepolerd
HID minidriver-extensie
Een HID minidriver-apparaatextensie is apparaatspecifiek en wordt alleen gebruikt door een HID minidriver. Het HID-klassestuurprogramma wijst het geheugen toe voor de minidriver-apparaatextensie wanneer het klassestuurprogramma de apparaatextensie voor een functioneel apparaatobject (FDO) maakt. De HID-minidriver specificeert de grootte van zijn apparaatextensie wanneer de minidriver wordt geregistreerd bij het HID-klasse-stuurprogramma. De grootte wordt opgegeven door het lid DeviceExtensionSize van een HID_MINIDRIVER_REGISTRATION structuur.
De HID_DEVICE_EXTENSION-structuur gebruiken
Een HID minidriver moet een HID_DEVICE_EXTENSION structuur gebruiken als de indeling voor de apparaatextensie die door het HID-klassestuurprogramma is gemaakt voor een functioneel apparaatobject (FDO). Het HID-klassestuurprogramma stelt de leden van deze structuur in wanneer de FDO wordt geïnitialiseerd. Een HID minidriver mag de informatie in deze structuur niet wijzigen.
Een HID_DEVICE_EXTENSION structuur bevat de volgende leden:
PhysicalDeviceObject is een aanwijzer naar het fysieke apparaatobject (PDO) dat het onderliggende invoerapparaat vertegenwoordigt.
NextDeviceObject is een aanwijzer bovenaan de apparaatstack onder het FDO.
MiniDeviceExtension is een aanwijzer naar de HID minidriver apparaatextensie.
Met een aanwijzer naar de FDO van een invoerapparaat, retourneert de volgende GET_MINIDRIVER_DEVICE_EXTENSION macro een aanwijzer naar een HID minidriver-extensie:
#define GET_MINIDRIVER_DEVICE_EXTENSION(DO) ((PDEVICE_EXTENSION) (((PHID_DEVICE_EXTENSION)(DO)->DeviceExtension)->MiniDeviceExtension))
PDEVICE_EXTENSION is een aanwijzer naar een apparaatspecifieke apparaatextensie die is gedeclareerd door een HID-minidriver.
Op dezelfde manier kan een HID-minidriver een aanwijzer verkrijgen naar de PDO van het invoerapparaat en naar de bovenkant van de apparaatstack die zich onder de FDO van het invoerapparaat bevindt.
Wanneer een HID-minidriver een IRP naar beneden verzendt in de apparaatstack, moet het NextDeviceObject als doelapparaatobject worden gebruikt.
Standaard minidriver routines
Een HID minidriver moet de volgende standaard routines voor stuurprogrammaondersteuning bieden:
- HID-minidriver DriverEntry-routine
- HID minidriver AddDevice-routine
- HID-minidriver ontslagroutine
Een HID minidriver moet ook ondersteuning bieden voor de dispatch routines die worden beschreven in Dispatch routines geleverd door een HID minidriver.
DriverEntry-routine
De DRIVER_INITIALIZE routine in een HID minidriver doet het volgende:
Hiermee maakt u een stuurprogrammaobject voor het gekoppelde paar stuurprogramma's (HID-klassestuurprogramma en een HID minidriver).
Hiermee stelt u de vereiste stuurprogrammainvoerpunten in het HID minidriver-stuurprogrammaobject.
Roept HidRegisterMinidriver aan om de HID minidriver te registreren bij het HID-klassestuurprogramma.
Behandelt apparaatspecifieke configuraties die alleen worden gebruikt door de HID minidriver.
AddDevice-routine
Het HID-klassestuurprogramma verwerkt het maken en initialiseren van het functionele apparaatobject (FDO) voor een onderliggend invoerapparaat. Het HID-klassestuurprogramma beheert ook de FDO vanuit het perspectief van de hoger gelegen interface naar het onderliggende apparaat en de onderliggende apparaten (HID-collecties).
Het HID-klassestuurprogramma DRIVER_ADD_DEVICE routine roept de HID minidriver AddDevice routine aan, zodat de minidriver interne apparaatspecifieke initialisatie kan uitvoeren.
De parameters die worden doorgegeven aan de HID minidriver DRIVER_ADD_DEVICE routine zijn het stuurprogrammaobject van de minidriver en de FDO. Het HID-klassestuurprogramma geeft de FDO door aan de minidriver AddDevice-routine, niet aan het fysieke apparaatobject voor het onderliggende invoerapparaat.
De HID-minidriver DRIVER_ADD_DEVICE-routine krijgt een verwijzing naar de minidriver-apparaatuitbreiding van de FDO.
Normaal gesproken doet de HID minidriver DRIVER_ADD_DEVICE routine het volgende:
Initialiseert de minidriver-apparaatextensie. De apparaatextensie wordt alleen gebruikt door de minidriver.
Retourneert STATUS_SUCCESS. Als de minidriver een foutstatus retourneert, verwijdert het HID-klassestuurprogramma de FDO en retourneert de foutstatus naar de Plug en Play-manager.
Uitlaadroutine
De Unload-routine van het HID-klassestuurprogramma roept de HID-minidriver DRIVER_UNLOAD routine aan. Een HID-minidriver geeft alle interne bronnen vrij die zijn toegewezen door de minidriver.
Verzendroutines
Een HID minidriver moet de volgende verzendroutines leveren: maken, sluiten, intern apparaatbeheer, systeembeheer, Plug en Play en energiebeheer. Met uitzondering van interne aanvragen voor apparaatbeheer bieden de meeste van deze verzendroutines een minimale functie. Wanneer het HID-klassestuurprogramma deze verzendroutines aanroept, wordt het minidriver-stuurprogrammaobject en het functionele apparaatobject (FDO) doorgegeven.
IRP_MJ_CREATE (Aanmaakverzoek)
In overeenstemming met WDM-vereisten bieden het HID-klassestuurprogramma en een HID-minidriver een verzendroutine voor het maken van aanvragen. De FDO kan echter niet worden geopend. Het HID-klassestuurprogramma retourneert STATUS_UNSUCCESSFUL.
Een HID minidriver hoeft slechts een stub te bieden. De create-verzendroutine wordt nooit aangeroepen.
IRP_MJ_CLOSE
In overeenstemming met WDM-vereisten moeten het HID-klassestuurprogramma en een HID-minidriver een verzendroutine bieden voor gesloten aanvragen. De FDO kan echter niet worden geopend. Het HID-klassestuurprogramma retourneert STATUS_INVALID_PARAMETER_1.
Een HID minidriver hoeft alleen een stub te bieden. De close dispatch routine wordt nooit aangeroepen.
IRP_MJ_DEVICE_CONTROL
Een HID-minidriver heeft geen verzendroutine nodig voor aanvragen voor apparaatbeheer. Het HID-klassestuurprogramma geeft geen aanvragen voor apparaatbeheer door aan een minidriver.
IRP_MJ_INTERNAL_DEVICE_CONTROL
Een HID-minidriver moet een verzendroutine bieden voor interne apparaatbeheeraanvragen die ondersteuning bieden voor de aanvragen die worden beschreven in HID minidriver-IOCTLs.
Het HID-klassestuurprogramma maakt voornamelijk gebruik van interne aanvragen voor apparaatbeheer voor toegang tot het onderliggende invoerapparaat.
De HID minidriver verwerkt deze aanvragen op een apparaatspecifieke manier.
IRP_MJ_SYSTEM_CONTROL
Een HID minidriver moet een verzendroutine bieden voor systeembeheeraanvragen. Een HID minidriver is echter alleen vereist om systeembeheeraanvragen door te geven aan de apparaatstack als volgt:
De huidige IRP-stacklocatie overslaan
De aanvraag doorsturen langs de apparaatstack van de FDO
IRP_MJ_PNP
Een HID minidriver moet een verzendroutine leveren voor Plug en Play-aanvragen.
Het HID-klasse-stuurprogramma voert alle Plug-and-Play-verwerking uit die geassocieerd is met de FDO. Wanneer het HID-klassestuurprogramma een Plug en Play-aanvraag verwerkt, wordt de Plug en Play-dispatch-routine van de HID-minidriver aangeroepen.
Een HID minidriver Plug en Play dispatch routine:
Verwerkt het verzenden van de aanvraag naar beneden in de apparaatstack van de FDO en het voltooien van de aanvraag tijdens de terugweg naar boven in de apparaatstack, afhankelijk van elk type aanvraag.
Voert apparaatspecifieke verwerking uit die is gekoppeld aan bepaalde aanvragen om de statusinformatie van de FDO bij te werken.
De minidriver kan bijvoorbeeld de Plug en Play-status van de FDO bijwerken (met name of de FDO wordt gestart, gestopt of verwijderd).
IRP_MJ_POWER
De HID minidriver moet een verzendroutine leveren voor energieaanvragen. Het HID-klassestuurprogramma beheert echter de stroomverwerking voor de FDO.
In overeenstemming met WDM-vereisten verzendt een HID-minidriver op deze manier stroomaanvragen naar beneden op de apparaatstack van de FDO:
Slaat de huidige IRP-stacklocatie over
Hiermee start u de volgende energie-IRP
Hiermee verzendt u de stroom-IRP omlaag in de apparaatstack van de FDO
Normaal gesproken geeft de HID minidriver stroomaanvragen door aan de apparaatstack zonder extra verwerking.