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.
Ontwikkelaars van streaming-minidrivers hebben de mogelijkheid om het klassestuurprogramma toe te staan synchronisatie te verwerken. Wanneer minidrivers zich registreren bij het klassestuurprogramma, kunnen ze kiezen voor synchronisatie van klassestuurprogramma's door het lid TurnOffSynchronization van HW_INITIALIZATION_DATA in te stellen op FALSE.
Wanneer het klassestuurprogramma synchronisatie afhandelt, zorgt dit ervoor dat twee onderdelen van de minidriver-code nooit tegelijkertijd worden uitgevoerd. Het klassestuurprogramma zet alle streamaanvragen in de wachtrij en geeft deze één voor één door aan de minidriver.
Een doel van deze synchronisatie is om de schrijver van de minidriver te bevrijden van het omgaan met alle details van stuurprogrammasynchronisatie en het in de wachtrij plaatsen van verzoeken in een multitasking-, reentrant-, multiprocessoromgeving. Sommige minidrivers mogen deze echter niet gebruiken. Er worden twee voorbeelden gegeven in het onderwerp Synchronisatievoorbeelden die illustreren wat een minidriver moet doen met betrekking tot synchronisatie.
Het uitschakelen van stroomklassesynchronisatie betekent dat alle aanvragen onmiddellijk en asynchroon worden aangeroepen naar de minidriver binnen de context van de verzendende thread op PASSIVE_LEVEL. Uitzonderingen op de voorgaande regel zijn HwCancelPacket, TimeoutHandler en Timer-routines. Deze worden aangeroepen op Dispatcher-niveau. Een laatste uitzondering is de interrupt-handler, die wordt aangeroepen bij DIRQL.
Wanneer de synchronisatie is uitgeschakeld, is de minidriver verantwoordelijk voor het uitvoeren van synchronisatie in overeenstemming met het WDM-model. Als een minidriver wordt teruggeroepen op PASSIVE_LEVEL, kan deze worden onderbroken door hogere IRQL-gebeurtenissen, zoals DPC's of interrupts. Als een minidriver op DISPATCH_LEVEL wordt opgeroepen, kan deze vervolgens worden onderbroken door interrupts. Minidriver-functies waarmee gedeelde resources worden bewerkt, moeten de toegangen synchroniseren.
Meerdere aanvragen kunnen tegelijkertijd worden uitgegeven aan dezelfde of verschillende streams wanneer streamklassesynchronisatie is uitgeschakeld. De minidriver moet zijn eigen aanvragen in de wachtrij plaatsen en eventuele hardwaresynchronisatie met andere threads en de ISR afhandelen. Spin locks, mutexes en KeSynchronizeExecution zijn enkele van de synchronisatieobjecten die beschikbaar zijn voor het streamen van minidrivers die worden uitgevoerd zonder streamklassesynchronisatie.