Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Drivrutiner och komponenter i användarläge kommer åt de flesta systemdefinierade objekt via hanterar. Handtagen representeras av den ogenomskinliga datatypen HANDLE. (Observera att handtag inte används för att komma åt enhetsobjekt eller drivrutinsobjekt.)
För de flesta objekttyper ger den kernellägesrutin som skapar eller öppnar objektet ett handtag till anroparen. Anroparen använder sedan den hanteraren vid efterföljande åtgärder på objektet.
Här är en lista över objekttyper som drivrutiner vanligtvis använder och de rutiner som ger referenser till objekt av den typen.
| Objekttyp | Motsvarande skapa/öppna rutin |
|---|---|
Fil |
|
Registernycklar |
IoOpenDeviceInterfaceRegistryKey, IoOpenDeviceRegistryKey, ZwCreateKey, ZwOpenKey |
Trådar |
|
Evenemang |
|
Symboliska länkar |
|
Katalogobjekt |
|
Avsnittsobjekt |
När drivrutinen inte längre behöver åtkomst till objektet anropas rutinen ZwClose för att stänga handtaget. Detta fungerar för alla objekttyper som anges i tabellen ovan.
De flesta rutiner som tillhandahåller handtag har en OBJECT_ATTRIBUTES struktur som parameter. Den här strukturen kan användas för att ange attribut för handtaget.
Drivrutiner kan specificera följande handtagsattribut:
OBJ_KERNEL_HANDLE
Handtaget kan bara nås från kärnläge.
OBJ_INHERIT
Alla underordnade i den aktuella processen får en kopia av handtaget när de skapas.
OBJ_FORCE_ACCESS_CHECK
Det här attributet anger att systemet utför alla åtkomstkontroller på handtaget. Som standardinställning kringgår systemet alla åtkomstkontroller på hanterare som skapats i kernelläge.
Använd InitializeObjectAttributes rutin för att ange dessa attribut i en OBJECT_ATTRIBUTES struktur.
Information om hur du verifierar objektreferenser finns i Det gick inte att verifiera objektreferenser.
Hantering av privata objekt
När en drivrutin skapar ett objekthandtag för privat användning måste drivrutinen ange attributet OBJ_KERNEL_HANDLE. Detta säkerställer att handtaget inte är tillgängligt för program i användarläge.
Handtag för delat objekt
En drivrutin som delar objekthandtag mellan kernelläge och användarläge måste skrivas noggrant för att undvika att oavsiktligt skapa säkerhetshål. Här följer några riktlinjer:
Skapa handtag i kernelläge och skicka dem till användarläge i stället för tvärtom. Handtag som skapas av en komponent i användarläge och skickas till drivrutinen bör inte vara betrodda.
Om drivrutinen måste ändra handtagen för användarlägesprogram använder du attributet OBJ_FORCE_ACCESS_CHECK för att kontrollera att programmet har nödvändig åtkomst.
Använd ObReferenceObjectByPointer för att behålla en referens i kernelläge på ett delat handtag. Om en komponent i användarläge stänger handtaget går annars referensantalet till noll och om drivrutinen sedan försöker använda eller stänga handtaget kraschar systemet.
Om ett program i användarläge skapar ett händelseobjekt kan en drivrutin vänta på att händelsen ska signaleras, men bara om programmet skickar ett handtag till händelseobjektet till drivrutinen via en IOCTL. Drivrutinen måste hantera IOCTL i kontexten för den process som skapade händelsen och måste verifiera att handtaget är en händelsereferens genom att anropa ObReferenceObjectByHandle.