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.
Stuurprogramma's vormen een aanzienlijk percentage van de totale code die wordt uitgevoerd in de kernelmodus. Een kernelmodusstuurprogramma is in feite een onderdeel van het besturingssysteem. Daarom dragen stuurprogramma's die betrouwbaar en veilig zijn aanzienlijk bij aan de algehele betrouwbaarheid van het besturingssysteem. Volg deze richtlijnen om een betrouwbaar stuurprogramma voor de kernelmodus te maken:
Beveilig apparaatobjecten correct.
Gebruikerstoegang tot de stuurprogramma's en apparaten van een systeem wordt beheerd door beveiligingsdescriptors die het systeem toewijst aan apparaatobjecten. Meestal stelt het systeem beveiligingsparameters voor apparaten in wanneer een apparaat wordt geïnstalleerd. Zie Beveiligde apparaatinstallaties makenvoor meer informatie. Soms is het geschikt voor een stuurprogramma om een rol te spelen bij het beheren van de toegang tot het apparaat. Voor meer informatie, zie Apparaatobjecten beveiligen.
Valideer apparaatobjecten correct.
Als een stuurprogramma meerdere typen apparaatobjecten maakt, moet deze controleren welk type het in elke IRP ontvangt. Zie Fout bij het valideren van apparaatobjectenvoor meer informatie.
Gebruik 'veilige tekenreeksfuncties'.
Wanneer u tekenreeksen bewerkt, moet een stuurprogramma veilige tekenreeksfuncties gebruiken in plaats van de tekenreeksfuncties die worden geleverd met C/C++-taalruntimebibliotheken. Voor meer informatie, zie Veilige tekenreeksfuncties gebruiken.
Objectgrepen valideren.
Stuurprogramma's die objectgrepen ontvangen als invoer, moeten controleren of de ingangen geldig zijn, toegankelijk zijn en van het verwachte type zijn. Zie de volgende onderwerpen voor meer informatie over het gebruik van objecthandvatten:
Ondersteuning bieden voor multiprocessors.
Neem nooit aan dat uw stuurprogramma alleen wordt uitgevoerd op systemen met één processor. Zie de volgende onderwerpen voor informatie over programmeertechnieken die u kunt gebruiken om ervoor te zorgen dat uw stuurprogramma goed werkt op multiprocessorsystemen:
De status van het stuurprogramma correct verwerken.
Het is belangrijk om altijd te verifiëren dat uw bestuurder zich in de toestand bevindt die u verwacht. Als het stuurprogramma bijvoorbeeld een IRP ontvangt, wordt er al een IRP van hetzelfde type onderhouden? Als de bestuurder niet op deze situatie controleert, kan de eerste IRP verloren gaan. Voor meer informatie, zie Fout bij controleren van de status van een stuurprogramma.
IRP-invoerwaarden valideren.
Het is essentieel om vanuit zowel een betrouwbaarheid als een beveiligingsperspectief alle waarden te valideren die zijn gekoppeld aan een IRP, zoals bufferadressen en lengten. De volgende onderwerpen bevatten informatie over het valideren van IRP-invoerwaarden:
DispatchReadWrite met gebufferde I/O
Fouten bij met gebufferde I/O
DispatchReadWrite met behulp van directe I/O
Verwerk de I/O-stack op de juiste manier.
Wanneer IRPs naar beneden worden doorgegeven aan de stuurprogrammastack, is het belangrijk dat stuurprogramma's IoSkipCurrentIrpStackLocation of IoCopyCurrentIrpStackLocationToNext aanroepen, om de I/O-stacklocatie van het volgende stuurprogramma in te stellen. Schrijf geen code waarmee een I/O-stacklocatie rechtstreeks naar de volgende wordt gekopieerd.
Zorg voor een juiste afhandeling van IRP-voltooiprocessen.
Een stuurprogramma moet nooit een IRP met een statuswaarde van STATUS_SUCCESS voltooien, tenzij het de IRP daadwerkelijk ondersteunt en verwerkt. Zie voor meer informatie over de juiste manieren om IRP-voltooiingsbewerkingen af te handelen.
Behandel IRP-annuleringsbewerkingen correct.
Annuleringsbewerkingen kunnen lastig zijn om correct te coderen, omdat ze meestal asynchroon worden uitgevoerd. Problemen in de code waarmee annuleringsbewerkingen worden verwerkt, kunnen lange tijd onopgemerkt blijven, omdat deze code doorgaans niet vaak wordt uitgevoerd in een actief systeem.
Lees en begrijp alle informatie die onder Annuleren van IRPswordt gegeven. Let vooral op Het synchroniseren van IRP-annuleringen en punten ter overweging bij het annuleren van IRPs.
Een manier om de synchronisatieproblemen die zijn gekoppeld aan annuleringsbewerkingen te voorkomen, is door een annuleringsveilige IRP-wachtrij te implementeren. Een annulering-veilige IRP-wachtrij is een door het stuurprogramma beheerde wachtrij die in Windows XP en latere besturingssysteemversies is geïntroduceerd en bovendien achterwaarts compatibel is met eerdere versies.
Zorg ervoor dat IRP-opruim- en sluitbewerkingen correct worden uitgevoerd.
Zorg ervoor dat u het verschil tussen IRP_MJ_CLEANUP en IRP_MJ_CLOSE aanvragen begrijpt. Opschoningsaanvragen komen binnen nadat een toepassing alle ingangen voor een bestandsobject sluit, maar soms voordat alle I/O-aanvragen zijn voltooid. Sluitverzoeken komen binnen nadat alle I/O-aanvragen voor het bestandsobject zijn voltooid of geannuleerd. Zie de volgende onderwerpen voor meer informatie:
DispatchCreate-, DispatchClose- en DispatchCreateClose-routines
Fouten bij het afhandelen van opschonings- en afsluitingsbewerkingen
Zie Aanvullende fouten bij het afhandelen van IR'svoor meer informatie over het correct verwerken van IR's.
Stuurprogrammaverifier gebruiken
Driver Verifier is het belangrijkste hulpprogramma dat u kunt gebruiken om de betrouwbaarheid van uw stuurprogramma te garanderen. Stuurprogrammacontrole kan controleren op een verscheidenheid aan veelvoorkomende problemen met stuurprogramma's, inclusief enkele van de problemen die in deze sectie worden besproken. Het gebruik van Driver Verifier vervangt echter niet zorgvuldig, doordacht softwareontwerp.