Dela via


Standardkrav för drivrutinsrutin

Tänk på följande när du utformar en drivrutin i kernelläge:

  • Varje drivrutin måste ha en DriverEntry- rutin som initierar datastrukturer och resurser för hela drivrutinen. I/O-hanteraren anropar DriverEntry-routinen när drivrutinen läses in.

  • Varje drivrutin måste ha minst en sändningsrutin som tar emot och bearbetar I/O-begärandepaket (IRP:er). Varje drivrutin måste placera startpunkten för en sändningsrutin i sin DRIVER_OBJECT struktur för varje IRP-huvudfunktionskod som drivrutinen kan ta emot. En drivrutin kan ha en separat sändningsrutin för varje IRP-huvudfunktionskod, eller så kan den ha en eller flera dispatch-rutiner som hanterar flera funktionskoder.

  • Varje WDM-drivrutin måste ha en Avlastningsrutin . Drivrutinen måste placera inträdespunkten för avlastningsrutinen i drivrutinsobjektet. Ansvaret för en PnP-drivrutins avlastningsrutin är minimalt, men en icke-PnP-drivrutin ansvarar för att frigöra systemresurser som drivrutinen använder.

  • Varje WDM-drivrutin måste ha en AddDevice-rutin och definiera dess startpunkt i drivrutinstillägget för drivrutinsobjektet. En AddDevice-rutin ansvarar för att skapa och initiera enhetsobjekt för varje PnP-enhet som drivrutinen styr.

  • En drivrutin kan ha en StartIo-rutin, som I/O-hanteraren anropar för att starta I/O-åtgärder för IRP:er som drivrutinen har köat till en systemtillhandahållen IRP-kö. Alla drivrutiner som inte har en StartIo-rutin måste antingen konfigurera och hantera interna köer för de IRP:er som den tar emot, eller så måste den slutföra varje IRP inom sina sändningsrutiner. Drivrutiner på högre nivå kanske inte har någon StartIo-rutin, om de helt enkelt vidarebefordrar IRP:er till drivrutiner på lägre nivå direkt från sina dispatchrutiner.

  • Vissa miniportdrivrutiner är undantag från ovanstående krav. Se den enhetstypspecifika dokumentationen i Windows Driver Kit (WDK) för information om kraven för miniportdrivrutiner.

  • Om en drivrutin har någon annan typ av standardrutin beror på dess funktioner och på hur drivrutinen passar in i systemet (till exempel om den interoperates med drivrutiner som tillhandahålls av systemet). Mer information finns i den specifika dokumentationen av enhetstyp i WDK.