windows - Hvor er en usermode tråd kontekst gemt, og er det muligt at ændre?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg spekulerede på, om nogen ved, hvor sammenhængen af ​​en tråd, der kører i usermode, er gemt i kernel? og hvis der er nogen API'er til at håndtere at få og sætte en usermode tråd sammenhæng? Jeg ved, at du ikke bør gøre det af en eller anden grund, så vær venlig at ikke sidetrack ind i det. Dette er udelukkende af hensyn til forskning og vilje Ikke blive brugt af andet end lokale projekter.


I usermode har vi GetThreadContext og SetThreadContext, men jeg skal gøre det fra en enhedsdriver i kernen, jeg ville ønske jeg havde mere at skrive, men jeg kan ikke finde nogen oplysninger om dette emne overhovedet, så jeg ønsker nogen mere uddannet end mig kan oplyse mig om nogle af Windows-internerne ved hånden her.


Hilsen Paze.

Bedste reference


Når tråd indtastes i kernel mode, er konteksten gemt i den kernel stack, i struct \_KTRAP\_FRAME - den erklæret i ntdkk.h. i ntoskrnl.exe (alle versioner fra win2000 op til win10) findes eksporterede api


NTKERNELAPI
NTSTATUS
NTAPI
PsGetContextThread(
    \_\_in PETHREAD Thread,
    \_\_inout PCONTEXT ThreadContext,
    \_\_in KPROCESSOR\_MODE Mode
    );


du kan bruge det til at få trådkontekst (og PsSetContextThread til indstillet trådkontekst). [13]


om hvordan dette virker - se i wrk - når du forsøger at få/indstille kontekst fra en anden trådkernemodus APC indsættes i denne tråd med peger til intern GETSETCONTEXT struktur, efter at denne anmodning begynder at vente på begivenhed (OperationComplete) fra denne struktur. når tråden (for hvilken vi spørger kontekst) næste gang begynder at udføres i kernel - APC rutine (PspGetSetContextSpecialApc) udføres - den udfylder kontekst fra \_KTRAP\_FRAME og indstiller begivenhed (OperationComplete ) [14]