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.
Microsoft raadt aan dat WBDI-stuurprogramma's gebruikmaken van het USB I/O-doel dat is ingebouwd in User-Mode Driver Framework (UMDF).
UmdfDispatcher instellen
Een INF-bestand dat een UMDF-stuurprogramma installeert, moet een WDF-specifieke DDInstall- sectie bevatten. Als u het USB-I/O-doel in UMDF gebruikt, moet u de registerrichtlijn UmdfDispatcher instellen binnen deze DDInstall sectie.
In de volgende sectie van WudfBioUsbSample.inx in het WudfBioUsbSample voorbeeld wordt getoond hoe deze richtlijn kan worden ingesteld:
[Biometric_Install.NT.Wdf]
KmdfService=WINUSB, WinUsb_Install
UmdfDispatcher=WinUsb
UmdfService=WudfBioUsbSample, WudfBioUsbSample_Install
UmdfServiceOrder=WudfBioUsbSample
Zie de UmdfDispatcher INF-richtlijn opgevenvoor specifieke informatie over UmdfDispatcher. Voor algemene informatie over WDF-registratierichtlijnen, zie WDF-richtlijnen opgeven.
in behandeling zijnde asynchrone leesaanvragen
WinUsb kan meerdere openstaande leesaanvragen verwerken. Apparaten waarvoor minimale latentie tussen leesbewerkingen tijdens een scan is vereist, moeten een aantal openstaande asynchrone leesaanvragen in behandeling houden. Als het stuurprogramma asynchrone aanvragen doet, geeft WinUsb deze aanvragen uit voordat de overdracht teruggaat naar de gebruikersmodus voor de voltooiingsroutines van eerdere leesaanvragen.
U kunt verwijzen naar de methode CBiometricDevice::InitiatePendingRead
in Device.cpp in WudfBioUsbSample om een codevoorbeeld te zien van hoe u een leesaanvraag in behandeling kunt houden.
De code voor het voltooien van een leesaanvraag moet een lus van de volgende stappen zijn:
Maak een vooraf toegewezen frameworkgeheugenobject door IWDFDriver::CreatePreallocatedWdfMemoryaan te roepen.
Geef callbackcode op in een OnCompletion routine. Zie
CBiometricDevice::OnCompletion
in het voorbeeld.Verkrijg een pointer naar de IRequestCallbackRequestCompletion-interface van het eigendomhebbende object.
Registreer de callback-functie door IWDFIoRequest::SetCompletionCallback aan te roepen en de pointer door te geven aan IRequestCallbackRequestCompletion die in de vorige stap is verkregen. Het framework roept nu de callback aan wanneer een I/O-aanvraag is voltooid.
Roep IWDFIoRequest::Verzend om de leesaanvraag naar het apparaat te verzenden.
Leesaanvraag verwerken wanneer de voltooiing van de callback plaatsvindt. Voordat de OnCompletion routine een nieuwe in behandeling zijnde leesaanvraag initieert, moet deze de status van het I/O-doel controleren. Hiervoor voert u een query uit op IWDFUsbTargetPipe om een aanwijzer naar de IWDFIoTargetStateManagement-interface te verkrijgen. Roep vervolgens IWDFIoTargetStateManagement::GetStateaan:
IWDFIoTarget * pTarget IWDFIoTargetStateManagement * pStateMgmt = NULL; WDF_IO_TARGET_STATE state; HRESULT hrQI = pTarget->QueryInterface(IID_PPV_ARGS(&pStateMgmt)); WUDF_TEST_DRIVER_ASSERT((SUCCEEDED(hrQI) && pStateMgmt)); state = pStateMgmt->GetState();
Wanneer de scan is voltooid, annuleert u alle wachtende leesaanvragen.
Als u het UMDF-USB-doel gebruikt, kunt u toestaan dat leesaanvragen in behandeling blijven bij afschakelen en inschakelen.
Als u het UMDF-USB doel niet gebruikt, moet het stuurprogramma stoppen met het verzenden van wachtende leesaanvragen bij D0Exit en opnieuw opstarten bij D0Entry.
Selectief Onderbreken
Een WBDI-stuurprogramma moet ondersteuning bieden voor USB-selectieve onderbreking.
Een apparaat dat systeemwaak en apparaat-inactiviteit ondersteunt, moet de registerinstellingen voor selectief onderbreken in WinUsb inschakelen, zoals wordt weergegeven in dit codevoorbeeld van WudfBioUsbSample.inx:
HKR,,"SystemWakeEnabled",0x00010001,1
HKR,,"DeviceIdleEnabled",0x00010001,1
De USB-stack van het besturingssysteem kan niet garanderen wanneer het systeem ontwaakt of wanneer het stuurprogramma kan beginnen met lezen vanaf het apparaat.
In het ideale geval moet het apparaat gereed zijn om een scan vast te leggen wanneer het systeem in sluimerstand gezet wordt. Als er een scan optreedt terwijl het systeem is onderbroken, moet het apparaat de invoergegevens voor een volledige vingerafdrukscan in de cache opslaan. Wanneer het systeem wordt geactiveerd, leest het stuurprogramma vervolgens de gegevens van het apparaat in. Door dit scenario te ondersteunen, kunt u scenario's voor systeemwaak en ontgrendelen/aanmelden inschakelen.