Wat is een Windows-kernelstuurprogramma?

Wat is de Windows Kernel Driver geschreven met de WDK?

Wat is er anders dan een normale app of service?


Antwoord 1, autoriteit 100%

Kernelstuurprogramma’s zijn programma’s die zijn geschreven tegen de eigen API van Windows NT (in plaats van de API van het Win32-subsysteem) en die in kernelmodus worden uitgevoerd op de onderliggende hardware. Dit betekent dat een stuurprogramma moet kunnen omgaan met het wisselen van virtuele geheugencontexten tussen processen, en moet worden geschreven om ongelooflijk stabiel te zijn – omdat kernelstuurprogramma’s in de kernelmodus draaien, als er een crasht, brengt dit het hele systeem naar beneden. Kernelstuurprogramma’s zijn niet geschikt voor alles behalve hardwareapparaten omdat ze beheerderstoegang nodig hebben om te installeren of te starten, en omdat ze de beveiliging verwijderen die de kernel normaal biedt aan programma’s die crashen, namelijk dat ze zichzelf laten crashen en niet het hele systeem.

Lang verhaal kort:

  • Drivers gebruiken de native API in plaats van de Win32 API
    • Dit betekent dat stuurprogramma’s over het algemeen geen gebruikersinterface kunnen weergeven.
  • Drivers moeten het geheugen beheren en hoe het geheugen expliciet wordt gewisseld — met behulp van zaken als wisselbare pool en niet-wisselbare pool.
  • Drivers moeten omgaan met het wisselen van procescontext en niet afhankelijk zijn van welk proces toevallig de paginatabel heeft terwijl ze worden uitgevoerd.
  • Drivers kunnen niet door beperkte gebruikers in de kernel worden geïnstalleerd.
  • Drivers werken met geprivilegieerde rechten op processorniveau.
  • Een fout in een programma op gebruikersniveau leidt tot beëindiging van het proces van dat programma. Een fout in een bestuurder brengt het systeem met een Blue Screen of Death ten val.
  • Drivers moeten omgaan met hardwarebits op laag niveau, zoals Interrupts en Interrupt Request Levels (IRQL’s).

Antwoord 2, autoriteit 17%

Het is code die in de kernelmodus draait in plaats van in de gebruikersmodus. Kernelmoduscode heeft directe toegang tot de binnenkant van het besturingssysteem, hardware enz.

U schrijft altijd kernelmodusmodules om apparaatstuurprogramma’ste implementeren.


Antwoord 3

Een kernelstuurprogramma is een implementatie op laag niveau van een “toepassing”.
Omdat het in de kernelcontext draait, heeft het de mogelijkheid om rechtstreeks toegang te krijgen tot de kernel-API en het geheugen.

Een kernelstuurprogramma moet bijvoorbeeld worden gebruikt om:

  • Toegang tot bestanden beheren (wachtwoordbeveiliging, verbergen)
  • Toegang tot niet-standaard bestandssystemen (zoals ext, reiserfs, zfs en etc.) en apparaten toestaan
  • Echte API-haken
  • …en om vele andere redenen

Als u meer wilt weten, kunt u met uw favoriete zoekmachine zoeken op trefwoord ‘ring0’.


Antwoord 4

Anderen hebben het verschil uitgelegd als het perspectief van systeemniveau.
Als je aan het ontwikkelen bent in C++, zijn er onderstaande verschillen in de ontwikkeling van de gebruikersmodus en de ontwikkeling in de kernelmodus.

  1. Onverwerkte uitzonderingen crashen het proces in de gebruikersmodus, maar in de kernelmodus crasht het hele systeem (gezichts-BSOD).
  2. Als het gebruikersmodusproces wordt beëindigd zonder vrij privégeheugen, maakt het systeem impliciet procesgeheugen vrij. Maar in de kernelmodus blijft er geheugen vrij na het opstarten van het systeem.
  3. De gebruikersmoduscode wordt geschreven en uitgevoerd in PASSIVE_LEVEL. In de kernelmodus zijn er meer IRQL-niveaus.
  4. Debuggen van kernelcodes gedaan met afzonderlijke machines. Maar u kunt de gebruikersmodus op dezelfde machine debuggen.
  5. je kunt niet alle C++-functionaliteit in de kernelmodus gebruiken, zoals Exception handling en STL.
  6. Ingangspunten zijn verschillend, in de gebruikersmodus gebruikt u de hoofdingang als ingangspunt. Maar in de kernelmodus moeten we DriverEntry gebruiken.
  7. U kunt geen nieuwe operator in de kernel-modus gebruiken, u moet het expliceren overbelasten.

Other episodes