windows - hvad er forskellen mellem \_EPROCESS objekt og \_KPROCESS objekt

Indlæg af Hanne Mølgaard Plasc

Problem



Ved analyse lærte jeg, at selv \_KPROCESS-objekter kan være medlemmer af listen ActiveProcessLinks. Hvad er forskellen mellem \_EPROCESS og \_KPROCESS objekter? Hvornår oprettes en og en ikke? Hvad er de begrebsmæssige forskelle mellem dem?

Bedste reference


Se her:


http://channel9.msdn.com/Shows/Going+Deep/Arun-Kishan-Process-Management-in-Windows-Vista[4]


EPROCESS er kernel-modværdien af ​​PEB fra brugertilstand. Flere detaljer findes i dette dokument på Alex Ionescus websted samt bogen af ​​Schreiber og andre bøger om NT internals. [5] [6]


Brug dt i WinDbg for at få en ide om, hvordan de ser ud.

Andre referencer 1


Dette er forenklet, men kernel-modusdelen af ​​Windows O/S er opdelt i tre stykker: HAL, kernen og de administrerende delsystemer. De ledende delsystemer omhandler generel O/S-politik og drift. Kernen beskæftiger sig med procesarkitekturspecifikke detaljer for lavt niveauoperationer (fx spinlocks, trådskifte) såvel som planlægning. HAL beskæftiger sig med forskelle, der opstår i særdeleshed implementeringer af en processorarkitektur (for eksempel hvordan afbrydelser henføres til denne implementering af x86). Dette forklares mere detaljeret i Windows Internals-bogen.


Når du opretter en ny Win32-proces, vil både kernen og de administrerende delsystemer spore den. Kernen ønsker for eksempel at kende trådens prioritet og affinitet i processen, fordi det kommer til at påvirke planlægningen. De administrerende delsystemer ønsker at spore processen, for eksempel vil Security Executive Subsystem gerne knytte et token med processen så vi kan gøre sikkerhedskontrol senere.


Den struktur, som kernen bruger til at spore processen, er KPROCESS. Den struktur, som Executive Subsystems bruger til at spore det er EPROCESS. Som en implementeringsdetalje er KPROCESS det første felt i EPROCESS, så Executive Subsystems allokerer EPROCESS-strukturen og derefter kalder Kernen for at initialisere KPROCESS-delen af ​​den. I sidste ende er begge strukturer en del af procesobjektet, der repræsenterer forekomsten af ​​brugerprocessen. Dette skal også alle dækkes af Windows Internals bog.


-Scott

Andre referencer 2


EPROCESS er ikke tilgængelig i brugertilstand. Det er heller ikke KROCESS.


KPROCESS er en delmængde af EPROCESS. Hvis du ser på felterne i en debugger, vil du se, at KPROCESS indeholder felter, der er mere relaterede til planlægning og bogføring af processen på et lavere niveau, mens EPROCESS har højere niveauer af proceskontekster inde i den. som jeg er opmærksom på, kommer fra forskellige delsystemer, der interagerer med disse strukturer (Executive har strukturer og funktioner, der ofte er prefixed med Ex, mens kernen har strukturer og funktioner, der ofte er præfikset med Ke)


Du kan se dette i forskellige dokumenterede funktioner. Overvej prototypen til KeStackAttachProcess (http://msdn.microsoft.com/en-us/library/ff549659(v=vs.85).aspx), som er en Ke-funktioner og tager en KPROCESS. Der er ingen eksporterede og dokumenterede Ex-funktioner, der accepterer EPROCESS (eller KPROCESS), men Ps-funktioner behandles udelukkende i EPROCESSES. [7]


En lignende opdeling eksisterer for tråde, med KTHREAD og ETHREAD.