Dela via


Styra enhetsåtkomst i KMDF-drivrutiner

Drivrutiner måste hjälpa till att förhindra att användare får olämplig åtkomst till en dators enheter och filer. För att förhindra obehörig åtkomst till enheter och filer måste du:

  • Namnge endast enhetsobjekt när det behövs.

  • Ange säkerhetsbeskrivningar för enhetsobjekt och gränssnitt.

Endast namngivning av enhetsobjekt vid behov

Liksom de flesta WDM-drivrutiner (Windows Driver Model) namnger ramverksbaserade drivrutiner vanligtvis inte sina enhetsobjekt. Program kan komma åt en enhet genom att ange ett enhetsobjektnamn, så varje ytterligare enhetsobjektnamn representerar ytterligare en sökväg som ett program kan använda för att komma åt enheten.

För att förhindra obehörig åtkomst till en enhet kan varje drivrutin ange en säkerhetsbeskrivning när ett enhetsobjekt namnges. Filnamnet som operativsystemet tillhandahåller en drivrutin (se WdfFileObjectGetFileName) innehåller dock inte det enhetsobjektnamn som programmet använde. Om flera drivrutiner i drivrutinsstacken anger namn på sina enhetsobjekt kan drivrutinen därför inte avgöra vilket objektnamn programmet använde för att öppna enheten. Därför kan ett program öppna enheten med en mindre restriktiv säkerhetsbeskrivning än vad din drivrutin förväntar sig.

Fysiska enhetsobjekt (PDOs) måste ha namn. Vanligtvis anger inte ramverksbaserade bussdrivrutiner något namn för en PDO, eftersom ramverket (som standard) instruerar operativsystemet att generera ett namn.

Å andra sidan kan en ramverksbaserad drivrutin tilldela ett enhetsnamn till ett enhetsobjekt genom att anropa WdfDeviceInitAssignName. En drivrutin bör namnge ett funktionellt enhetsobjekt (FDO), filtrera enhetsobjekt (filtrera DO) eller endast PDO om drivrutinen måste ha stöd för ett äldre program som förväntar sig ett specifikt enhetsnamn, eller om drivrutinen tillhör en äldre drivrutinsstacken vars arkitektur kräver objektnamn.

I stället för att namnge domänkontrollanter och filtrera DO:er bör WDM-drivrutiner och ramverksbaserade drivrutiner tillhandahålla enhetsgränssnitt som program kan komma åt. Operativsystemet hämtar säkerhetsbeskrivningen för ett enhetsgränssnitt från enhetens PDO och från registerposter som anges i inf-filen för ett drivrutinspaket. En bussdrivrutin kan tillhandahålla enhetsgränssnitt för en PDO om drivrutinens enheter fungerar i råläge, utan en funktionsdrivrutin.

Vissa drivrutiner måste anropa WdfDeviceCreateSymbolicLink för att skapa symboliska länknamn för sina enheter. En drivrutin kan till exempel skapa ett MS-DOS enhetsnamn om program förväntar sig att se ett MS-DOS namn på enheten. Om drivrutinen skapar ett symboliskt länknamn för en namnlös FDO eller filtrerar DO associerar ramverket det symboliska länknamnet med PDO:ns namn. (Kontrollenheter är inte associerade med en PDO, så drivrutinen kan inte skapa ett symboliskt länknamn för en icke namngiven kontrollenhet.)

Tillhandahålla säkerhetsbeskrivningar för enhetsobjekt och gränssnitt

Alla namngivna enhetsobjekt måste ha en säkerhetsbeskrivning. Operativsystemet använder enhetsobjektets säkerhetsbeskrivning för att fastställa vilka typer av användare som får åtkomst till en enhet och dess enhetsgränssnitt. Säkerhetsbeskrivningar kan tilldelas till enhetsobjekt genom att:

Operativsystemet använder som standard även enhets-PDO:ns säkerhetsbeskrivning för att fastställa åtkomsträttigheter till de enhetsgränssnitt som en drivrutin tillhandahåller.

Ett drivrutinspaket kan tillhandahålla en INF-fil som anger en enhets säkerhetsbeskrivningar med ett INF AddReg-direktiv i ett INF DDInstall.HW-avsnitt.

Mer information om hur du anger säkerhetsbeskrivningar i INF-filer finns i Skapa säkra enhetsinstallationer.

Om drivrutinen skapar PDOs för enheter som körs i raw-läge måste drivrutinen ange en enhetskonfigurationsklass när den anropar WdfPdoInitAssignRawDevice. Om drivrutinen skapar kontrollenheter kan den dessutom anropa WdfDeviceInitSetDeviceClass för att ange en enhetskonfigurationsklass. I båda dessa fall kan systemadministratörer använda registernyckeln för den angivna installationsklassen för att lagra säkerhetsbeskrivningar för enheten.

Information om hur operativsystemet avgör vilken säkerhetsbeskrivning som ska användas för en enhet finns i Kontrollera enhetsåtkomst.

När ramverket skapar ett enhetsobjekt anger det alltid flaggan FILE_DEVICE_SECURE_OPEN så att operativsystemet kontrollerar en enhets säkerhetsbeskrivning innan ett program får åtkomst till namn i enhetens namnområde. Mer information om flaggan FILE_DEVICE_SECURE_OPEN och enhetens namnområde finns i Kontrollera åtkomst till enhetsnamnområde.