• Nenhum resultado encontrado

Αρχιτεκτονική σχεδίασης Multithreading & Kernel των Windows

N/A
N/A
Protected

Academic year: 2023

Share "Αρχιτεκτονική σχεδίασης Multithreading & Kernel των Windows"

Copied!
227
0
0

Texto

(1)

ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΠΛΗΡΟΦΟΡΙΩΝ

ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΣΧΕΔΙΑΣΗΣ MULTITHREADING & KERNEL ΤΩΝ WINDOWS

Ελευθερία Δερμεντζή (ΑΕΜ = 1416)

ΟΚΤΩΒΡΙΟΣ 2011

ΕΠΟΠΤΗΣ ΚΑΘΗΓΗΤΗΣ Στέργιος Παπαδημητρίου

(2)

Περιεχόμενα

Κεφάλαιο 1. Διαδικασίες, νήματα, και εργασίες ... 3

1.1 διαδικασία Internals ... 3

1.1.1 δομές δεδομένων ... 3

1.1.2 μεταβλητές πυρήνων ... 10

1.1.3 μετρητές απόδοσης... 10

1.1.4 σχετικές λειτουργίες ... 11

1.2 προστατευμένες διαδικασίες ... 12

1.3 ροή CreateProcess... 15

1.3.1 στάδιο 1: Μετατροπή και επικύρωση των παραμέτρων και των σημαιών ... 17

1.3.2 στάδιο 2: Ανοίγοντας την εικόνα που εκτελείται ... 19

1.3.3 στάδιο 3: Δημιουργία του εκτελεστικού αντικειμένου διαδικασίας παραθύρων (Διαδικασία PspAllocate-) ... 22

1.3.4 στάδιο 4: Δημιουργία του αρχικού νήματος και του σωρού του και Πλαίσιο ... 28

1.3.5 στάδιο 5: Εκτελώντας τα παράθυρα υποσύστημα-συγκεκριμένα Μετα- έναρξη ... 30

1.3.6 στάδιο 6: Αρχική εκτέλεση του αρχικού νήματος ... 33

1.3.7 στάδιο 7: Εκτέλεση της έναρξης διαδικασίας στα πλαίσια η νέα διαδικασία ... 34

1.4 νήμα Internals ... 42

1.4.1 δομές δεδομένων ... 43

1.4.2 μεταβλητές πυρήνων ... 48

1.4.3 μετρητές απόδοσης... 48

1.4.4 σχετικές λειτουργίες ... 48

1.4.5 γέννηση ενός νήματος ... 49

1.5 εξέταση της δραστηριότητας νημάτων ... 50

1.6 εργοστάσια εργαζομένων (λίμνες νημάτων) ... 55

1.7 σχέδιο νημάτων ... 60

1.7.1 επισκόπηση του σχεδίου παραθύρων ... 61

1.7.2 επίπεδα προτεραιότητας ... 64

1.7.3 παράθυρα που APIs ... 66

1.7.4 σχετικά εργαλεία ... 66

1.7.5 σε πραγματικό χρόνο προτεραιότητες ... 69

1.7.6 κράτη νημάτων ... 70

1.7.7 βάση δεδομένων αποστολέων ... 73

1.7.8 κβάντο ... 75

1.7.9 σχέδιο των σεναρίων ... 85

1.7.10 μετατροπή πλαισίου ... 89

1.7.11 μη απασχόλησης νήμα... 89

1.7.12 ωθήσεις προτεραιότητας ... 91

1.7.13 συστήματα πολυεπεξεργαστών ... 109

1.7.14 αλγόριθμοι νήμα-σχεδιασμού πολυεπεξεργαστών ... 122

1.7.15 όρια ποσοστού ΚΜΕ ... 124

1.8 αντικείμενα εργασίας ... 127

1.9 συμπέρασμα ... 132

2. Ασφάλεια ... 133

2.1 εκτιμήσεις ασφάλειας ... 133

2.2 τμήματα συστημάτων ασφάλειας ... 137

2.3 προστασία των αντικειμένων ... 141

(3)

2.3.1 έλεγχοι πρόσβασης ... 143

2.4 δικαιώματα και προνόμια απολογισμού ... 190

2.4.1 δικαιώματα απολογισμού ... 191

2.4.3 έξοχα προνόμια ... 194

2.5 έλεγχος ασφάλειας ... 197

2.6 σύνδεση ... 199

2.6.1 έναρξη Winlogon ... 201

2.6.2 βήματα σύνδεσης χρηστών ... 204

2.7 έλεγχος απολογισμού χρηστών ... 210

2.7.1 Virtualization ... 212

2.8 πολιτικές περιορισμού λογισμικού ... 223

2.9 συμπέρασμα ... 226

(4)

Σε αυτό το κεφάλαιο, θα εξηγήσουμε τις δομές δεδομένων και τους αλγορίθμους που εξετάζουν τις διαδικασίες,νήματα, και εργασίες στο λειτουργικό σύστημα παραθύρων. Το πρώτο τμήμα εστιάζει στον εσωτερικό δομές που αποτελούν μια διαδικασία. Το δεύτερο τμήμα περιγράφει τα βήματα που περιλαμβάνονται στη δημιουργία της διαδικασίας (και το αρχικό νήμα του). Τα internals των νημάτων και του σχεδιασμού νημάτων περιγράφονται έπειτα

Το κεφάλαιο ολοκληρώνει με μια περιγραφή του αντικειμένου εργασίας.

Όπου οι σχετικές μετρητές απόδοσης ή οι μεταβλητές πυρήνων υπάρχουν, αναφέρονται. Αν και αυτό το βιβλίο δεν είναι παράθυρα προγραμματίζοντας το βιβλίο, τη σχετικά διαδικασία, το νήμα, και τα παράθυρα εργασίας οι λειτουργίες παρατίθενται έτσι ότι μπορείτε να ακολουθήσετε τις πρόσθετες πληροφορίες για τη χρήση τους

Επειδή οι διαδικασίες και τα νήματα αγγίζουν τόσα πολλά συστατικά στα παράθυρα, διάφοροι όροι και δομές δεδομένων (τέτοιες ως σύνολα εργασίας, αντικείμενα και λαβές, σωροί μνήμης συστημάτων, et ainsi de suite και τα λοιπά) αναφέρεται σε αυτό το κεφάλαιο αλλά εξηγείται λεπτομερώς αλλού στο βιβλίο.

1.1 διαδικασία Internals

Αυτό το τμήμα περιγράφει τις βασικές δομές δεδομένων διαδικασίας παραθύρων. Επίσης απαριθμείται ο βασικός πυρήναςμεταβλητές, μετρητές απόδοσης, και λειτουργίες και εργαλεία που αφορούν τις διαδικασίες

1.1.1 δομές δεδομένων

Κάθε διαδικασία παραθύρων αντιπροσωπεύεται από έναν εκτελεστικό

(5)

ιδιότητες σχετικά με μια διαδικασία, ένας φραγμός EPROCESS περιέχει και δείχνει το αριθμός άλλων σχετικών δομών δεδομένων. Παραδείγματος χάριν, κάθε διαδικασία έχει ένα ή περισσότερα νήματα αντιπροσωπευόμενος από τους εκτελεστικούς φραγμούς νημάτων (ETHREAD). (Οι δομές δεδομένων νημάτων εξηγούνται τμήμα «νήμα Internals» αργότερα σε αυτό το κεφάλαιο.) ο φραγμός EPROCESS και τα σχετικά στοιχεία του οι δομές υπάρχουν στο διάστημα διευθύνσεων συστημάτων, με εξαίρεση το φραγμό περιβάλλοντος διαδικασίας (PEB), το οποίο υπάρχει στο διάστημα διευθύνσεων διαδικασίας (επειδή περιέχει τις πληροφορίες που πρέπει να είναι προσεγγισμένος από τον κώδικα χρήστης-τρόπου)

Εκτός από το φραγμό EPROCESS και το PEB, η διαδικασία υποσυστημάτων παραθύρων (Csrss) διατηρεί μια παράλληλη δομή για κάθε διαδικασία που εκτελεί ένα πρόγραμμα παραθύρων. Τέλος, το μέρος πυρήνας-τρόπου του υποσυστήματος παραθύρων (Win32k.sys) θα διατηρήσει επίσης ένα στοιχείο ανά-διαδικασίας κτίστε που δημιουργείται την πρώτη φορά που ένα νήμα καλεί έναν ΧΡΗΣΤΗ παραθύρων ή μια λειτουργία GDI που είναι εφαρμοσμένος στον τρόπο πυρήνων

Το σχήμα 1-1 είναι ένα απλουστευμένο διάγραμμα των δομών διαδικασίας και δεδομένων νημάτων. Κάθε στοιχείο η δομή που παρουσιάζεται στο σχήμα περιγράφεται λεπτομερώς σε αυτό το κεφάλαιο. Πρώτα εστιάστε στο φραγμό διαδικασίας. (Θα φτάσουμε στο φραγμό νημάτων νήμα των τμημάτων «Το Internals» αργότερα στο σχήμα 5-2 κεφαλαίου.) παρουσιάζει βασικούς τομείς σε έναν φραγμό EPROCESS

ΠΕΙΡΑΜΑ: Επίδειξη του σχήματος ενός φραγμού ePrOCeSS

Για έναν κατάλογο των τομέων που αποτελούν έναν φραγμό EPROCESS και τα όφσετ τους σε δεκαεξαδικό, DT τύπων _eprocess στο διορθωτή πυρήνων. την παραγωγή (που περικόπτεται για η χάρη του διαστήματος) σε ένα τριανταδυάμπιτο σύστημα μοιάζει με αυτό:

(6)

1. lkd> DT _eprocess 2. nt! _EPROCESS

3. +0x000 PCB: _KPROCESS

4. +0x080 ProcessLock: _EX_PUSH_LOCK 5. +0x088 CreateTime: _LARGE_INTEGER 6. +0x090 ExitTime: _LARGE_INTEGER

7. +0x098 RundownProtect: _EX_RUNDOWN_REF 8. +0x09c UniqueProcessId: Ptr32 κενό

9. +0x0a0 ActiveProcessLinks: _LIST_ENTRY 10. +0x0a8 QuotaUsage: [3] Uint4B

11. +0x0b4 QuotaPeak: [3] Uint4B 12. +0x0c0 CommitCharge: Uint4B 13. +0x0c4 PeakVirtualSize: Uint4B 14. +0x0c8 VirtualSize: Uint4B

15. +0x0cc SessionProcessLinks: _LIST_ENTRY 16. +0x0d4 DebugPort: Ptr32 κενό

17. +0x0d8 ExceptionPortData: Ptr32 κενό 18. +0x0d8 ExceptionPortValue: Uint4B 19. +0x0d8 ExceptionPortState: Pos 0, 3 μπιτ 20. +0x0dc ObjectTable: Ptr32 _HANDLE_TABLE 21. +0x0e0 σημείο: _EX_FAST_REF

22. +0x0e4 WorkingSetPage: Uint4B

23. +0x0e8 AddressCreationLock: _EX_PUSH_LOCK 24. +0x0ec RotateInProgress: Ptr32 _ETHREAD 25. +0x0f0 ForkInProgress: Ptr32 _ETHREAD 26. +0x0f4 HardwareTrigger: Uint4B

27. +0x0f8 PhysicalVadRoot: Ptr32 _MM_AVL_TABLE 28. +0x0fc CloneRoot: Ptr32 κενό

29. +0x100 NumberOfPrivatePages: Uint4B 30. +0x104 NumberOfLockedPages: Uint4B 31. +0x108 Win32Process: Ptr32 κενό 32. +0x10c εργασία: Ptr32 _EJOB

(7)

33. +0x110 SectionObject: Ptr32 κενό

34. +0x114 SectionBaseAddress: Ptr32 κενό

35. +0x118 QuotaBlock: Ptr32 _EPROCESS_QUOTA_BLOCK

Σημειώστε ότι ο πρώτος τομέας (PCB) είναι πραγματικά μια υποδομή, ο φραγμός διαδικασίας πυρήνων (KPROCESS). Για να εμφανίσουμε την μορφή του block του πυρήνα θα πρέπει να πληκτρολογήσουμε dt _kprocess:

1. lkd> dt _kprocess 2. nt!_KPROCESS

3. +0x000 Header : _DISPATCHER_HEADER 4. +0x010 ProfileListHead : _LIST_ENTRY 5. +0x018 DirectoryTableBase : Uint4B 6. +0x01c Unused0 : Uint4B

7. +0x020 LdtDescriptor : _KGDTENTRY 8. +0x028 Int21Descriptor : _KIDTENTRY 9. +0x030 IopmOffset : Uint2B

10. +0x032 Iopl : UChar 11. +0x033 Unused : UChar

12. +0x034 ActiveProcessors : Uint4B 13. +0x038 KernelTime : Uint4B 14. +0x03c UserTime : Uint4B

15. +0x040 ReadyListHead : _LIST_ENTRY

16. +0x048 SwapListEntry : _SINGLE_LIST_ENTRY 17. +0x04c VdmTrapcHandler : Ptr32 Void

18. +0x050 ThreadListHead : _LIST_ENTRY 19. +0x058 ProcessLock : Uint4B

20. +0x05c Affinity : Uint4B

21. +0x060 AutoAlignment : Pos 0, 1 Bit 22. +0x060 DisableBoost : Pos 1, 1 Bit 23. +0x060 DisableQuantum : Pos 2, 1 Bit

(8)

24. +0x060 ReservedFlags : Pos 3, 29 Bits 25. +0x060 ProcessFlags : Int4B

26. +0x064 BasePriority : Char 27. +0x065 QuantumReset : Char 28. +0x066 State : UChar

29. +0x067 ThreadSeed : UChar 30. +0x068 PowerState : UChar 31. +0x069 IdealNode : UChar

32. Chapter 5 Processes, Threads, and Jobs 339 33. +0x06a Visited : UChar

34. +0x06b Flags : _KEXECUTE_OPTIONS 35. +0x06b ExecuteOptions : UChar

36. +0x06c StackCount : Uint4B

37. +0x070 ProcessListEntry : _LIST_ENTRY 38. +0x078 CycleTime : Uint8B

Ένας εναλλακτικός τρόπος να δει το KPROCESS (και άλλες υποδομές στο EPROCESS) είναι να χρησιμοποιήσουμε την διακοπή recursion (- ρ) διακόπτη της εντολής της DT. Παραδείγματος χάριν, αν γράψουμε

DT _eprocess - r1 recurse

θα δούμε όλες τις υποδομές ένα επίπεδο βαθιά

Η εντολή της DT παρουσιάζει το σχήμα ενός φραγμού διαδικασίας, όχι το περιεχόμενό της. Για να παρουσιάσει μια περίπτωση από μια πραγματική διαδικασία, μπορείτε να διευκρινίσετε τη διεύθυνση μιας δομής EPROCESS ως επιχείρημα εντολή της DT. Μπορείτε να πάρετε τη διεύθυνση όλων των φραγμών EPROCESS στο σύστημα με τη χρησιμοποίηση ! διαδικασία 0 εντολή 0. Ένα σχολιασμένο παράδειγμα της παραγωγής από αυτήν την εντολή συμπεριλαμβάνεται αργότερα σε αυτό το κεφάλαιο

(9)

Ο πίνακας 1-1 εξηγεί μερικών από τους τομείς στο προηγούμενο πείραμα λεπτομερέστερα και περιλαμβάνει αναφορές σε άλλες θέσεις στο βιβλίο όπου μπορείτε να βρείτε περισσότερες πληροφορίες για τις. Δεδομένου ότι έχουμε εν λόγω πριν από και αναμφισβήτητα θα πει πάλι, οι διαδικασίες και τα νήματα είναι τέτοια αναπόσπαστα τμήματα των παραθύρων ότι είναι αδύνατο να μιλήσει για τους χωρίς αναφορά σε πολλά άλλα μέρη του συστήματος. Για να κρατήσει το μήκος αυτού του κεφαλαίου εύχρηστου, εντούτοις, έχουμε καλύψει εκείνα τα σχετικά θέματα (όπως διαχείριση, ασφάλεια , αντικείμενα, και λαβές μνήμης) αλλού

Ο φραγμός διαδικασίας πυρήνων (KPROCESS), ο οποίος είναι μέρος του φραγμού EPROCESS, και φραγμός περιβάλλοντος διαδικασίας (PEB), που δείχνεται από το φραγμό EPROCESS, περιέχει πρόσθετες λεπτομέρειες για το αντικείμενο διαδικασίας. Ο φραγμός KPROCESS (που καλείται μερικές φορές. Το PCB ή ο φραγμός ελέγχου διεργασίας) είναι διευκρινισμένο στο σχήμα 5-3. Περιέχει τις βασικές πληροφορίες που Ο πυρήνας παραθύρων πρέπει να σχεδιάσει τα νήματα μέσα σε μια διαδικασία

Το PEB, που ζει στο χρήστη επεξεργάζεται το διάστημα διευθύνσεων, περιέχει τις πληροφορίες που απαιτούνται από φορτωτής εικόνας, ο διευθυντής σωρών, και άλλο σύστημα DLLs παραθύρων που πρέπει να έχουν πρόσβαση σε το από το χρήστη τρόπος. (Οι φραγμοί EPROCESS και KPROCESS είναι προσιτοί μόνο από τον τρόπο πυρήνων.)

Η βασική δομή του PEB είναι διευκρινισμένη στο σχήμα 5-4 και εξηγείται λεπτομερέστερα αργότερα σε αυτό κεφάλαιο

ΠΕΙΡΑΜΑ: εξέταση του PeB

Μπορείτε να πετάξετε τη δομή PEB με! peb εντολή στο διορθωτή πυρήνων. Για να πάρει η διεύθυνση του PEB, χρησιμοποιεί ! εντολή διαδικασίας ως εξής:

1. lkd> ! διαδικασία

(10)

2. ΔΙΑΔΙΚΑΣΙΑ 8575f030 SessionId: 1 Cid: 08d0 Peb: 7ffd9000 ParentCid:

0360

3. DirBase: 1a81b000 ObjectTable: e12bd418 HandleCount: 66 4. Εικόνα: windbg.exe

Κατόπιν διευκρινίστε ότι διεύθυνση ! peb διατάξτε ως εξής:

1. lkd> ! peb 7ffd9000 2. PEB σε 7ffd9000

3. InheritedAddressSpace: Αριθ 4. ReadImageFileExecOptions: Αριθ 5. BeingDebugged: Αριθ

6. ImageBaseAddress: 002a0000 7. LDR 77895d00

8. Ldr.Initialized: Ναι

9. Ldr.InInitializationOrderModuleList: 00151c38. 00191558 10. Ldr.InLoadOrderModuleList: 00151bb8 . 00191548 11. Ldr.InMemoryOrderModuleList: 00151bc0. 00191550 12. TimeStamp βάσεων ενότητα

13. 2a0000 4678a41e 19 Ιούν. 23: 50: 54 2007 C:\Program Files\Debugging Tools For Windows\ windbg.exe

15. 777d0000 4549bdc 9 Νοέμ. 02 05:43: 37 2006 C:\Windows\system32\Ntdll.dll

16. 764c0000 4549bd80 2 Νοέμ. 05: 42: 24 2006 C:\Windows\system32

\ kernel32.dll

17. SubSystemData: 00000000 18. ProcessHeap: 00150000 19. ProcessParameters: 001512e0

20. WindowTitle: «υπολογιστής γραφείου \ WinDbg.lnk του C:\Users\Alex Ionescu \»

21. ImageFile: «εργαλεία διόρθωσης αρχείων \ του C:\Program για τα παράθυρα \ windbg.exe

(11)

22. CommandLine: ««εργαλεία του C:\Program Files\Debugging για τα παράθυρα\ windbg.exe " «

23. DllPath: «εργαλεία του C:\Program Files\Debugging για τα παράθυρα C:\Windows\

24. system32 C:\Windows\system C:\Windows. C:\Windows\system32 C:\Windows

25. C:\Windows\System32\Wbem κοινά αρχεία \ κοινό Roxio \ αρχείων \ του C:\Program

26. DLLShared \ αρχεία \ κοινό Roxio \ DLLShared \ του C:\Program Files\Common

C:\Program

27. Κοινά αρχεία \ κοινό Roxio \ 9.0 \ DLLShared \ αρχείων \ c:\sysint C:\Program Files\

28. QuickTime \ QTSystem \ « 29. Περιβάλλον: 001850a8

30. ALLUSERSPROFILE= C:\ProgramData

31. APPDATA= περιπλάνηση του C:\Users\Alex Ionescu \ AppData \

1.1.2 μεταβλητές πυρήνων

Μερικές βασικές σφαιρικές μεταβλητές πυρήνων που αφορούν τις διαδικασίες παρατίθενται στον πίνακα 5-2. Αυτοί οι μεταβλητές αναφέρονται αργότερα στο κεφάλαιο, όταν περιγράφονται τα βήματα στη δημιουργία μιας διαδικασίας

1.1.3 μετρητές απόδοσης

Τα παράθυρα διατηρούν έναν αριθμό μετρητών με τον οποίο μπορείτε να ακολουθήσετε τις διαδικασίες που τρέχουν επάνω το σύστημά σας μπορείτε να ανακτήσετε αυτούς τους μετρητές programmatically ή να τους δείτε με την απόδοση εργαλείο. Ο πίνακας 5-3 απαριθμεί τους μετρητές απόδοσης σχετικούς με τις διαδικασίες

(12)

1.1.4 σχετικές λειτουργίες

Για λόγους αναφοράς, μερικές από τις λειτουργίες παραθύρων που ισχύουν για τις διαδικασίες περιγράφονται στον πίνακα 5-4. Για περισσότερες πληροφορίες, συμβουλευθείτε την τεκμηρίωση παραθύρων API στο MSDN Βιβλιοθήκη

ΠΕΙΡΑΜΑ: χρησιμοποίηση του διορθωτή πυρήνων! εντολή διαδικασίας

Ο διορθωτής πυρήνων ! η εντολή διαδικασίας επιδεικνύει ένα υποσύνολο των πληροφοριών Φραγμός EPROCESS. Αυτή η παραγωγή τακτοποιείται σε δύο μέρη για κάθε διαδικασία. Πρώτα βλέπετε πληροφορίες για τη διαδικασία, όπως παρουσιάζεται εδώ (όταν δεν διευκρινίζετε μια διεύθυνση διαδικασίας ή Ταυτότητα! η διαδικασία απαριθμεί τις πληροφορίες για την ενεργό διαδικασία για την τρέχουσα ΚΜΕ):

1. lkd> ! διαδικασία

2. ΔΙΑΔΙΚΑΣΙΑ 85857160 SessionId: 1 Cid: 0bcc Peb: 7ffd9000 ParentCid:

090c

3. DirBase: b45b0820 ObjectTable: b94ffda0 HandleCount: 99 4. Εικόνα: windbg.exe

5. VadRoot 85a1c8e8 Vads 97 κλώνος 0 ιδιωτικά 5919. Τροποποιημένα 153. Κλειδωμένο 1

6. DeviceMap 9d32ee50 7. Συμβολικό ebaa1938

8. ElapsedTime 00:48: 44.125 9. UserTime 00:00: 00.000 10. KernelTime 00:00: 00.000

11. QuotaPoolUsage [PagedPool] 166784 12. QuotaPoolUsage [NonPagedPool] 4776

(13)

13. Μεγέθη συνόλου εργασίας (τώρα, ελάχιστος, ανώτατος) (8938, 50, 345) (35752KB, 200KB, 1380KB)

14. PeakWorkingSetSize 8938 15. VirtualSize 106 ΜΒ

16. PeakVirtualSize 108 ΜΒ 17. PageFaultCount 37066 18. ΥΠΟΒΑΘΡΟ MemoryPriority 19. BasePriority 8

20. CommitCharge 6242

Μετά από τη βασική διαδικασία η παραγωγή έρχεται ένας κατάλογος των νημάτων στη διαδικασία. Εκείνη η παραγωγή είναι εξηγημένος στο

«πείραμα: Χρησιμοποίηση του διορθωτή πυρήνων! τμήμα εντολής νημάτων» αργότερα κεφάλαιο. Άλλες εντολές που οι πληροφορίες διαδικασίας επίδειξης περιλαμβάνουν! λαβή, η οποία πετά πίνακας λαβών διαδικασίας. Οι δομές ασφάλειας διαδικασίας και νημάτων περιγράφονται μέσα στο Κεφάλαιο 2

1.2 προστατευμένες διαδικασίες

Στο πρότυπο ασφάλειας παραθύρων, οποιαδήποτε διαδικασία που τρέχει με έναν συμβολικό περιορισμό διορθώνει το προνόμιο (όπως ο απολογισμός ενός διοικητή) μπορεί να ζητήσει οποιοδήποτε δικαίωμα πρόσβασης που επιθυμεί σε οποιοιδήποτε άλλη διαδικασία που τρέχει μηχανή-για το παράδειγμα, αυτό μπορεί να διαβάσει και να γράψει την αυθαίρετη διαδικασία η μνήμη, εγχέει τον κώδικα, αναστέλλει και επαναλαμβάνει τα νήματα, και τις πληροφορίες ερώτησης για άλλες διαδικασίες

Τα εργαλεία όπως την ανάγκη εξερευνητών διαδικασίας και διευθυντών στόχου και ζητούν αυτά τα δικαιώματα πρόσβασης που παρέχουν η λειτουργία τους στους χρήστες

(14)

Αυτή η λογική συμπεριφορά (που οι βοήθειες εξασφαλίζουν ότι οι διοικητές θα έχουν πάντα τον πλήρη έλεγχο ο τρέχοντας κώδικας στις διαφωνίες συστημάτων) με τη συμπεριφορά του συστήματος για την ψηφιακή διαχείριση δικαιωμάτων απαιτήσεις που επιβάλλονται από τη βιομηχανία μέσων στα λειτουργικά συστήματα υπολογιστών που πρέπει να υποστηρίξουν αναπαραγωγή ήχου του προηγμένου, υψηλής ποιότητας ψηφιακού περιεχομένου όπως BluRay και τα μέσα hd-DVD. η αξιόπιστη και προστατευμένη αναπαραγωγή ήχου υποστήριξης τέτοιου περιεχομένου, χρήσεις παραθύρων προστάτευσε τις διαδικασίες. Αυτοί οι διαδικασίες υπάρχουν παράλληλα με τις κανονικές διαδικασίες παραθύρων, αλλά προσθέτουν τους σημαντικούς περιορισμούς δικαιώματα πρόσβασης που άλλες διαδικασίες στο σύστημα (ακόμα και που τρέχει με τα διοικητικά προνόμια) μπορέστε να ζητήσετε

Οι προστατευμένες διαδικασίες μπορούν να δημιουργηθούν από οποιαδήποτε εφαρμογή εντούτοις, το λειτουργικό σύστημα μόνο επιτρέψτε σε μια διαδικασία για να προστατευθείτε εάν το αρχείο εικόνας έχει υπογραφεί ψηφιακά με έναν πρόσθετο Πιστοποιητικό μέσων παραθύρων.

Η προστατευμένη πορεία MEDIA (PMP) Vista παραθύρων χρησιμοποιεί προστατευμένες διαδικασίες για να παρέχει την προστασία για τα μεγάλης αξίας μέσα, και υπεύθυνοι για την ανάπτυξη των εφαρμογών όπως DVD οι φορείς μπορούν να χρησιμοποιήσουν τις προστατευμένες διαδικασίες με τη χρησιμοποίηση του ιδρύματος API MEDIA

Η ακουστική διαδικασία γραφικών παραστάσεων συσκευών (Audiodg.exe) είναι μια προστατευμένη διαδικασία, από την προστατευμένη μουσική το περιεχόμενο μπορεί να αποκωδικοποιηθεί μέσω του. Ομοίως, η υποβολή έκθεσης λάθους παραθύρων (WER δείτε το κεφάλαιο 3 για περισσότερο πελάτη πληροφοριών ) η διαδικασία (Werfault.exe) μπορεί επίσης να τρέξει προστατευμένος επειδή χρειάζεται έχετε πρόσβαση στις προστατευμένες διαδικασίες σε περίπτωση που ένας από τους συντριβές.

Τέλος, η ίδια η διαδικασία συστημάτων προστατεύεται επειδή μερικές από τις πληροφορίες αποκρυπτογράφησης παράγονται από τον οδηγό Ksecdd.sys και αποθηκευμένος στη μνήμη χρήστης-τρόπου του. Η

(15)

διαδικασία συστημάτων προστατεύεται επίσης για να προστατεύσει την ακεραιότητα όλοι λαβές πυρήνων (από τη λαβή της διαδικασίας συστημάτων ο πίνακας περιέχει όλες τις λαβές πυρήνων σύστημα)

Στο επίπεδο πυρήνων, η υποστήριξη για τις προστατευμένες διαδικασίες είναι διπλή: κατ' αρχάς, ο όγκος της διαδικασίας η δημιουργία εμφανίζεται στον τρόπο πυρήνων για να αποφύγει τις επιθέσεις εγχύσεων. (Η ροή και για προστατευμένος και η τυποποιημένη δημιουργία διαδικασίας περιγράφεται λεπτομερώς στις επόμενες δεύτερες, προστατευμένες διαδικασίες τμημάτων.) θέστε ένα πρόσθετο κομμάτι στη δομή EPROCESS τους που τροποποιεί τη συμπεριφορά σχετικού με την ασφάλεια ρουτίνες στο διευθυντή διαδικασίας για να αρνηθεί ορισμένα δικαιώματα πρόσβασης που θα χορηγούνταν κανονικά διοικητές. Ο πίνακας 5-5 δείχνει τα δικαιώματα πρόσβασης που είναι περιορισμένα ή αρνημένα

331 Ορισμένα δικαιώματα πρόσβασης είναι επίσης εκτός λειτουργίας γιατί τα νήματα που τρέχουν το εσωτερικό προστάτευσαν τις διαδικασίες εξετάστε εκείνα τα δικαιώματα πρόσβασης αργότερα σε αυτό το κεφάλαιο στο τμήμα «νήμα Internals.» Επειδή ο εξερευνητής διαδικασίας χρησιμοποιεί τα τυποποιημένα παράθυρα APIs χρήστης-τρόπου στις πληροφορίες ερώτησης για επεξεργαστείτε τα internals, είναι ανίκανο να εκτελέσει ορισμένες διαδικασίες σε τέτοιες διαδικασίες. Αφ' ενός, α εργαλείο όπως WinDbg στον τρόπο διόρθωσης πυρήνων, ο οποίος χρησιμοποιεί την υποδομή πυρήνας-τρόπου για να λάβει αυτό οι πληροφορίες, θα είναι σε θέση να επιδείξουν τις πλήρεις πληροφορίες.

Δείτε το πείραμα στο νήμα τμήμα internals τον τρόπο με τον οποίο ο εξερευνητής διαδικασίας συμπεριφέρεται όταν έρχεται αντιμέτωπος με μια προστατευμένη διαδικασία τέτοια σαν Audiodg.exe

Σημείωση Όπως αναφέρεται στο κεφάλαιο 1, για να εκτελέσετε τον τοπικό πυρήνα που διορθώνει πρέπει να αρχίσετε μέσα τρόπος διόρθωσης (που επιτρέπεται με τη χρησιμοποίηση «bcdedit του /debug σε» ή με τη χρησιμοποίηση της προηγμένης Msconfig μπότας επιλογή). Αυτό προστατεύει από τις διορθωτής-βασισμένες επιθέσεις στις

(16)

προστατευμένες διαδικασίες και προστατευμένη Πορεία μέσων (PMP).

Όταν τίθεται σε έναρξη στον τρόπο διόρθωσης, η υψηλής ευκρίνειας ικανοποιημένη αναπαραγωγή ήχου εργασία παραδείγματος χάριν, η προσπάθεια να παιχτούν τα μέσα MPEG2 όπως ένα DVD θα οδηγήσει σε μια πρόσβαση παραβίαση μέσα στον παίκτη μέσων (αυτό είναι από το σχέδιο)

Ο περιορισμός αυτών των δικαιωμάτων πρόσβασης επιτρέπει σοβαρά τον πυρήνα sandbox μια προστατευμένη διαδικασία από πρόσβαση χρήστης- τρόπου. Αφ' ενός, επειδή μια προστατευμένη διαδικασία υποδεικνύεται από μια σημαία Ο φραγμός EPROCESS, ένας διοικητής μπορεί ακόμα να φορτώσει έναν οδηγό πυρήνας-τρόπου που θέτει εκτός λειτουργίας αυτού του κομμάτι

Εντούτοις, αυτό θα ήταν μια παραβίαση του PMP προτύπου και θεωρημένος κακόβουλος, και ένας τέτοιος οδηγός πιθανώς τελικά θα εμποδιζόταν από τη φόρτωση σε ένα εξηντατετράμπιτο σύστημα επειδή ο πυρήνας-τρόπος η κώδικας-υπογραφή της πολιτικής απαγορεύει την ψηφιακή υπογραφή του κακόβουλου κώδικα. Ακόμη και στα τριανταδυάμπιτα συστήματα, ο οδηγός πρέπει να αναγνωριστεί από PMP την πολιτική ειδάλλως η αναπαραγωγή ήχου θα σταματηθεί. Αυτή η πολιτική είναι εφαρμοσμένος από τη Microsoft και όχι από οποιαδήποτε ανίχνευση πυρήνων. Αυτός ο φραγμός θα απαιτούσε το εγχειρίδιο δράση από τη Microsoft για να προσδιοριστεί η υπογραφή ως κακόβουλο και να ενημερωθεί ο πυρήνας

1.3 ροή CreateProcess

Μέχρι τώρα σε αυτό το κεφάλαιο, έχετε δει τις δομές που είναι μέρος μιας διαδικασίας και το API λειτουργίες με τις οποίες εσείς (και το λειτουργικό σύστημα) μπορείτε να χειριστείτε τις διαδικασίες. Έχετε βρεί επίσης έξω πώς μπορείτε να χρησιμοποιήσετε τα εργαλεία στην άποψη πώς οι διαδικασίες αλληλεπιδρούν με το σύστημά σας. Αλλά πώς εκείνοι επεξεργάζεται μπαίνοντας σε η ύπαρξη, και πώς αυτοί βγαίνει μόλις

(17)

εκπληρώσουν το σκοπό τους; μετά από τα τμήματα, θα ανακαλύψετε πώς μια διαδικασία παραθύρων έρχεται στη ζωή

Μια διαδικασία υποσυστημάτων παραθύρων δημιουργείται όταν καλεί μια εφαρμογή μια από τη διαδικασία λειτουργίες δημιουργιών, όπως CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW, ή CreateProcessWithLogonW. Η δημιουργία μιας διαδικασίας παραθύρων αποτελείται από διάφορα στάδια που πραγματοποιούνται μέσα τρία μέρη του λειτουργικού συστήματος: η πελάτης-δευτερεύουσα βιβλιοθήκη Kernel32.dll παραθύρων (στην περίπτωση οι ρουτίνες CreateProcessAsUser, CreateProcessWithTokenW, και CreateProcessWithLogonW, μέρος της εργασίας γίνεται αρχικά σε Advapi32.dll), τον ανώτερο υπάλληλο παραθύρων, και τα παράθυρα διαδικασία υποσυστημάτων (Csrss)

Λόγω της πολλαπλάσιας αρχιτεκτονικής υποσυστημάτων περιβάλλοντος των παραθύρων, δημιουργία το εκτελεστικό αντικείμενο διαδικασίας (που άλλα υποσυστήματα μπορούν να χρησιμοποιήσουν) είναι χωρισμένο από την εργασία σχετική μέσα δημιουργία μιας διαδικασίας υποσυστημάτων παραθύρων. Έτσι, αν και η ακόλουθη περιγραφή της ροής Η λειτουργία CreateProcess παραθύρων είναι περίπλοκη, λαμβάνει υπόψη ότι μέρος της εργασίας είναι συγκεκριμένο για η σημασιολογία που προστέθηκε από το υποσύστημα παραθύρων σε αντιδιαστολή με την εργασία πυρήνων έπρεπε να δημιουργήσει εκτελεστικό αντικείμενο διαδικασίας

Ο ακόλουθος κατάλογος συνοψίζει τα κύρια στάδια της δημιουργίας μιας διαδικασίας με τα παράθυρα Λειτουργία CreateProcess. Οι διαδικασίες που εκτελούνται σε κάθε στάδιο περιγράφονται λεπτομερώς επόμενα τμήματα. Μερικές από αυτές τις διαδικασίες μπορούν να εκτελεσθούν από το ίδιο CreateProcess (ή άλλη ρουτίνες αρωγών στον τρόπο χρηστών), ενώ άλλες θα εκτελεσθούν από NtCreateUserProcess ή ένα από οι ρουτίνες αρωγών του στον τρόπο πυρήνων. Στη λεπτομερή ανάλυσή μας που ακολουθεί, θα διαφοροποιήσουμε μεταξύ τα δύο σε κάθε βήμα που απαιτείται

(18)

Σημείωση Πολλά βήματα CreateProcess συσχετίζονται με την οργάνωση του εικονικού διαστήματος διευθύνσεων διαδικασίας και επομένως αναφερθείτε σε πολλούς διοικητικούς όρους και δομές μνήμης που καθορίζονται στο κεφάλαιο 9

1. Επικυρώστε τις παραμέτρους μετατρέψτε τις σημαίες και τις επιλογές υποσυστημάτων παραθύρων στον ντόπιό τους αντίστοιχα αναλύστε, επικυρώστε, και μετατρέψτε τον κατάλογο ιδιοτήτων στο εγγενές αντίστοιχό του

2. Ανοίξτε το αρχείο εικόνας (.exe) που εκτελείται μέσα στη διαδικασία 3. Δημιουργήστε το εκτελεστικό αντικείμενο διαδικασίας παραθύρων

4. Δημιουργήστε το αρχικό νήμα (σωρός, πλαίσιο, και εκτελεστικό αντικείμενο νημάτων παραθύρων)

5. Εκτελέστε την μετα-δημιουργία, παράθυρο-υποσύστημα-συγκεκριμένη έναρξη διαδικασίας

6. Εκτέλεση έναρξης του αρχικού νήματος (εκτός αν η ΑΝΑΣΤΑΛΜΈΝΗ CREATE_ σημαία ήταν διευκρίνισε)

333 7. Στα πλαίσια της νέων διαδικασίας και του νήματος, ολοκληρώστε την έναρξη της διεύθυνσης χωρίστε κατά διαστήματα (όπως απαραίτητο φορτίο DLLs) και αρχίστε την εκτέλεση του προγράμματος

Το σχήμα 5-5 παρουσιάζει ότι μια επισκόπηση των σκηνικών παραθύρων ακολουθεί για να δημιουργήσει μια διαδικασία

1.3.1 στάδιο 1: Μετατροπή και επικύρωση των παραμέτρων και των σημαιών

Πρίν ανοίγει την εκτελέσιμη εικόνα που τρέχει, CreateProcess εκτελεί τα ακόλουθα βήματα: ■ Σε CreateProcess, η κατηγορία προτεραιότητας για τη νέα διαδικασία διευκρινίζεται ως ανεξάρτητα κομμάτια μέσα η παράμετρος CreationFlags. Κατά συνέπεια, μπορείτε να διευκρινίσετε περισσότερες από μια κατηγορίες προτεραιότητας για έναν ενιαίο Κλήση CreateProcess. Τα παράθυρα επιλύουν το θέμα του οποίου κατηγορία

(19)

προτεραιότητας για να ορίσει στη διαδικασία με την επιλογή του συνόλου κατηγορίας χαμηλός-προτεραιότητας

■ Εάν καμία κατηγορία προτεραιότητας δεν διευκρινίζεται για τη νέα διαδικασία, η κατηγορία προτεραιότητας προκαθορίζει σε κανονικό εκτός αν η κατηγορία προτεραιότητας της διαδικασίας που δημιούργησε αυτό είναι μη απασχόλησης ή κάτω από κανονικό, οπότε σ'αυτή την περίπτωση η κατηγορία προτεραιότητας της νέας διαδικασίας θα έχει την ίδια προτεραιότητα με τη δημιουργώντας κατηγορία

■ Εάν μια σε πραγματικό χρόνο κατηγορία προτεραιότητας διευκρινίζεται για τη νέα διαδικασία και ο επισκέπτης της διαδικασίας όχι έχετε το προνόμιο προτεραιότητας σχεδίου αύξησης, η κατηγορία προτεραιότητας χρησιμοποιείται αντ' αυτού. Σε άλλος οι λέξεις, CreateProcess δεν αποτυγχάνουν ακριβώς επειδή ο επισκέπτης έχει τα ανεπαρκή προνόμια για να δημιουργήσει διαδικασία στη σε πραγματικό χρόνο κατηγορία προτεραιότητας η νέα διαδικασία ακριβώς δεν θα έχει μια τόσο υψηλή προτεραιότητα όπως Πραγματικός χρόνος

■ Όλα τα παράθυρα συνδέονται με τους υπολογιστές γραφείου, η γραφική αντιπροσώπευση ενός χώρου εργασίας. Εάν κανένας υπολογιστής γραφείου δεν διευκρινίζεται σε CreateProcess, η διαδικασία συνδέεται με το ρεύμα του επισκέπτη υπολογιστής γραφείου

■ Εάν η διαδικασία είναι μέρος ενός αντικειμένου εργασίας, αλλά οι σημαίες δημιουργιών ζήτησαν ένα χωριστό εικονικό OS η μηχανή (VDM), η σημαία αγνοείται

■ Εάν ο επισκέπτης στέλνει μια λαβή σε ένα όργανο ελέγχου ως λαβή παραγωγής αντί μιας κονσόλας andle, οι τυποποιημένες σημαίες λαβών αγνοούνται

■ Εάν οι σημαίες δημιουργιών διευκρινίσουν ότι η διαδικασία θα διορθωθεί, Kernel32 αρχίζει το α σύνδεση ο ο εγγενής κώδικας διόρθωσης σε Ntdll.dll με την κλήση DbgUiConnectToDbg και του ETS α η λαβή διορθώνει το αντικείμενο από το φραγμό περιβάλλοντος νημάτων (TEB) μόλις επιστρέψει το unction

(20)

■ Kernel32.dll θέτει στην προεπιλογή τον τρόπο σκληρού λάθους εάν οι σημαίες δημιουργιών διευκρίνισαν μιας

■ Οι καθορισμένες ως προς τον χρήστη ιδιότητες απαριθμούν μετατρέπονται από το σχήμα υποσυστημάτων παραθύρων στον ντόπιο ormat, και εσωτερικές ιδιότητες προστίθεται σε τον

Σημείωση Ο κατάλογος ιδιοτήτων έδωσε τις άδειες μιας κλήσης CreateProcess που περνούν πίσω στον επισκέπτη πληροφορίες eyond ένας απλός κώδικας θέσης, όπως η διεύθυνση TEB του αρχικού νήματος ή πληροφορίες ν το τμήμα εικόνας. Αυτό είναι απαραίτητο για τις προστατευμένες διαδικασίες δεδομένου ότι ο γονέας δεν μπορεί ρωτήστε τις πληροφορίες του αφότου δημιουργείται το παιδί

Μόλις ολοκληρωθούν αυτά τα βήματα, CreateProcess θα εκτελέσει την αρχική κλήση Δημιουργία προσπάθειας NtCreateUserProcess ο της διαδικασίας. Επειδή Kernel32.dll δεν έχει καμία ιδέα σε αυτό σημείο hether που το όνομα εικόνας εφαρμογής είναι μια πραγματική εφαρμογή παραθύρων, ή εάν αυτό η δύναμη είναι ένα POSIX, 6 μπιτ, ή η εφαρμογή DOS, η κλήση μπορεί να αποτύχει, στην οποία το σημείο CreateProcess θα εξετάσει το rror ο λόγος και προσπαθεί να διορθώσει την κατάσταση

1.3.2 στάδιο 2: Ανοίγοντας την εικόνα που εκτελείται

Όπως διευκρινίζεται στο σχήμα 5-6, το πρώτο στάδιο σε NtCreateUserProcess είναι να βρεθεί ο κατάλληλος Εικόνα παραθύρων που θα τρέξει το εκτελέσιμο αρχείο που διευκρινίζεται από τον επισκέπτη και θα δημιουργήσει ένα τμήμα αντικείμενο για να το χαρτογραφήσει αργότερα στο διάστημα διευθύνσεων της νέας διαδικασίας. Εάν η κλήση απέτυχε για οποιοδήποτε λόγο, αυτό θα επιστρέψει σε CreateProcess με ένα κράτος αποτυχίας (δείτε τον πίνακα 5-6) που θα προκαλέσει CreateProcess εκτέλεση προσπάθειας πάλι

Εάν το εκτελέσιμο αρχείο που διευκρινίζεται είναι παράθυρα .exe, NtCreateUserProcess θα προσπαθήσει να ανοίξει αρχειοθετήστε και

(21)

δημιουργήστε ένα αντικείμενο τμημάτων για το. Το αντικείμενο δεν χαρτογραφείται στη μνήμη ακόμα, αλλά το ανοίγουν

Ακριβώς επειδή ένα αντικείμενο τμημάτων έχει δημιουργηθεί επιτυχώς δεν σημαίνει ότι το αρχείο ισχύει Εικόνα παραθύρων, εντούτοις θα μπορούσε να είναι ένα DLL ή ένα POSIX εκτελέσιμο. Εάν το αρχείο είναι ένα POSIX εκτελέσιμος, η εικόνα για να είναι οργανωμένες αλλαγές σε Posix.exe, και καινούρια ξεκινήματα CreateProcess από αρχή του σταδίου 1. Εάν το αρχείο είναι ένα DLL, CreateProcess αποτυγχάνει

Τώρα που έχει βρεί NtCreateUserProcess μια έγκυρη εκτελέσιμη εικόνα παραθύρων, ως τμήμα ο κώδικας δημιουργιών διαδικασίας που περιγράφεται στο στάδιο 3 αυτό κοιτάζει στο ληξιαρχείο κάτω από το ΛΟΓΙΣΜΙΚΌ HKLM \ \ Επιλογές εκτέλεσης αρχείων εικόνας της Microsoft \ WINDOWS NT \ CurrentVersion \ να δει εάν ένα subkey 335 με το αρχείο - όνομα και επέκταση της εκτελέσιμης εικόνας (αλλά χωρίς τον κατάλογο και την πορεία πληροφορία-για το παράδειγμα, Image.exe) υπάρχει εκεί. Εάν, PspAllocateProcess ψάχνει το α ονομασμένος αξία διορθωτής για εκείνο το κλειδί. Εάν αυτή η αξία είναι παρούσα, η εικόνα που οργανώνεται γίνεται η σειρά σε εκείνη την αξία και τα καινούρια ξεκινήματα CreateProcess στο στάδιο 1

Άκρη Μπορείτε να εκμεταλλευτήτε αυτήν την συμπεριφορά δημιουργιών διαδικασίας και να διορθώσετε τον κώδικα ξεκινήματος Διαδικασίες υπηρεσιών παραθύρων προτού να αρχίσουν παρά τη σύνδεση ο διορθωτής μετά από να αρχίσουν α υπηρεσία, η οποία δεν επιτρέπει σε σας για να διορθώσει τον κώδικα ξεκινήματος

Αφ' ενός, εάν η εικόνα δεν είναι παράθυρα .exe (για το παράδειγμα, εάν είναι ένα MS-dos, Win16, ή μια εφαρμογή POSIX), CreateProcess περνά από μια σειρά βημάτων να βρεί τα παράθυρα εικόνα υποστήριξης για να το τρέξει. Αυτή η διαδικασία είναι απαραίτητη επειδή οι εφαρμογές μη- παραθύρων δεν οργανώνονται τα άμεσα-παράθυρα χρησιμοποιούν αντ' αυτού μιας από μερικές πρόσθετες εικόνες υποστήριξης που είναι στη συνέχεια αρμόδιες για πραγματικά να τρέξει το πρόγραμμα μη- παραθύρων. Παραδείγματος χάριν, εάν προσπαθείτε να τρέξετε ένα

(22)

POSIX η εφαρμογή, CreateProcess τον προσδιορίζει υπό αυτήν τη μορφή και αλλάζει την εικόνα που οργανώνεται στα παράθυρα εκτελέσιμο αρχείο Posix.exe. Εάν προσπαθείτε να τρέξετε ένα MS-dos ή ένα Win16 εκτελέσιμο, η εικόνα οργανώνεται γίνεται τα παράθυρα εκτελέσιμο Ntvdm.exe. Εν ολίγοις, δεν μπορείτε να δημιουργήσετε άμεσα μια διαδικασία αυτή δεν είναι μια διαδικασία παραθύρων. Εάν τα παράθυρα δεν μπορούν να βρούν έναν τρόπο να επιλυθεί η ενεργοποιημένη εικόνα ως α Η διαδικασία παραθύρων (όπως φαίνεται στον πίνακα 5-6), CreateProcess αποτυγχάνει

336 Συγκεκριμένα, το δέντρο απόφασης ότι CreateProcess πηγαίνει κατευθείαν να τρέξει μια εικόνα είναι το ακόλουθο: ■ Εάν η εικόνα είναι μια εφαρμογή MS-dos με .exe, το .com, ή μια .pif επέκταση, ένα μήνυμα στέλνεται στο υποσύστημα παραθύρων στον έλεγχο εάν μια διαδικασία υποστήριξης MS-dos (Ntvdm.exe, διευκρινισμένο στον έλεγχο ΣΥΣΤΗΜΆΤΩΝ \ \ CurrentControlSet \ αξίας HKLM ληξιαρχείων το cmdline ΚΑΤΑΠΛΗΚΤΙΚΉΣ ΕΠΙΤΥΧΊΑΣ \ \) έχει ήδη δημιουργημένος για αυτήν την σύνοδο. Εάν μια διαδικασία υποστήριξης έχει δημιουργηθεί, χρησιμοποιείται για να τρέξει Εφαρμογή MS-dos. (Το υποσύστημα παραθύρων στέλνει το μήνυμα στο VDM [εικονικό DOS Μηχανή]

διαδικασία για να τρέξει τις νέες επιστροφές CreateProcess εικόνας.) έπειτα. Εάν μια διαδικασία υποστήριξης δεν έχει δημιουργημένος, η εικόνα για να είναι οργανωμένες αλλαγές σε Ntvdm.exe και καινούρια ξεκινήματα CreateProcess στο στάδιο 1

■ Εάν το αρχείο που τρέχει έχει .bat ή μια επέκταση του .cm δ, η εικόνα που οργανώνεται γίνεται Cmd.exe, Τα παράθυρα διατάζουν την υπαγόρευση, και τα καινούρια ξεκινήματα CreateProcess στο στάδιο 1.

(Το όνομα του αρχείου δεσμης είναι περασμένος ως πρώτη παράμετρος σε Cmd.exe.) ■ Εάν η εικόνα είναι ένα Win16 (παράθυρα 3.1) εκτελέσιμο, CreateProcess πρέπει να αποφασίσει εάν α η νέα διαδικασία VDM πρέπει να δημιουργηθεί για να το τρέξει ή εάν πρέπει να χρησιμοποιήσει το sessionwide προεπιλογής κοινή διαδικασία VDM (που δύναμη όχι ακόμα να έχει δημιουργηθεί). Οι σημαίες CreateProcess

(23)

CREATE_SEPARATE_WOW_VDM και CREATE_SHARED_WOW_VDM ελέγχει αυτό απόφαση. Εάν αυτές οι σημαίες δεν διευκρινίζονται, το ΣΎΣΤΗΜΑ \ \ CurrentControlSet αξίας HKLM ληξιαρχείων \ Η ΚΑΤΑΠΛΗΚΤΙΚΉ ΕΠΙΤΥΧΊΑ \ DefaultSeparateVDM ελέγχου \ υπαγορεύει τη συμπεριφορά προεπιλογής

Εάν η εφαρμογή πρόκειται να οργανωθεί σε ένα χωριστό VDM, η εικόνα για να είναι οργανωμένες αλλαγές στην αξία HKLM \ wowcmdline ΚΑΤΑΠΛΗΚΤΙΚΉΣ ΕΠΙΤΥΧΊΑΣ \ ελέγχου \ ΣΥΣΤΗΜΆΤΩΝ \ CurrentControlSet \ και καινούρια ξεκινήματα CreateProcess Στάδιο 1.

Διαφορετικά, το υποσύστημα παραθύρων στέλνει ένα μήνυμα που βλέπει εάν το κοινό VDM η διαδικασία υπάρχει και μπορεί να χρησιμοποιηθεί.

(Εάν η διαδικασία VDM τρέχει σε έναν διαφορετικό υπολογιστή γραφείου ή δεν είναι τρέχοντας κάτω από την ίδια ασφάλεια με τον επισκέπτη, δεν μπορεί να χρησιμοποιηθεί και μια νέα διαδικασία VDM πρέπει να είναι δημιουργημένο.) εάν μια κοινή διαδικασία VDM μπορεί να χρησιμοποιηθεί, το υποσύστημα παραθύρων στέλνει ένα μήνυμα σε το τρέξτε τη νέες εικόνα και τις επιστροφές CreateProcess. Εάν η διαδικασία VDM δεν έχει δημιουργηθεί ακόμα (ή εάν αυτό 337 υπάρχει αλλά δεν μπορεί να χρησιμοποιηθεί), η εικόνα για να είναι οργανωμένες αλλαγές στην εικόνα υποστήριξης VDM και Καινούρια ξεκινήματα CreateProcess στο στάδιο 1.

1.3.3 στάδιο 3: Δημιουργία του εκτελεστικού αντικειμένου διαδικασίας παραθύρων (Διαδικασία PspAllocate-)

Σε αυτό το σημείο, NtCreateUserProcess έχει ανοίξει ένα έγκυρο εκτελέσιμο αρχείο παραθύρων και ένα δημιουργημένο α αντικείμενο τμημάτων για να το χαρτογραφήσει στο νέο διάστημα διευθύνσεων διαδικασίας. Έπειτα δημιουργεί έναν ανώτερο υπάλληλο παραθύρων αντικείμενο διαδικασίας για να τρέξει την εικόνα με την κλήση της εσωτερικής λειτουργίας PspAllocateProcess συστημάτων

Η δημιουργία του εκτελεστικού αντικειμένου διαδικασίας (που γίνεται από το νήμα δημιουργίας) περιλαμβάνει μετά από τα υποστάδια: ■ Καθιέρωση

(24)

ο φραγμός EPROCESS ■ Δημιουργία του αρχικού διαστήματος διευθύνσεων διαδικασίας ■ Μονογραφή του φραγμού διαδικασίας πυρήνων (KPROCESS) ■ Καθιέρωση το PEB ■ Συμπέρασμα της οργάνωσης του διαστήματος διευθύνσεων διαδικασίας (που περιλαμβάνει τη μονογραφή της εργασίας καθορισμένος κατάλογος και εικονικοί περιγραφείς και χαρτογράφηση διαστήματος διευθύνσεων η εικόνα στο διάστημα διευθύνσεων) Σημείωση Ο μόνος χρόνος δεν θα υπάρξει μια διαδικασία γονέων είναι κατά τη διάρκεια της έναρξης συστημάτων. Μετά από αυτόν το σημείο, μια διαδικασία γονέων απαιτείται πάντα για να παρέχει ένα πλαίσιο ασφάλειας για τη νέα διαδικασία

Στάδιο 3A: Καθιέρωση ο φραγμός EPROCESS Αυτό το υποστάδιο περιλαμβάνει τα ακόλουθα βήματα: 1. Διαθέστε και μονογράψτε το φραγμό παραθύρων EPROCESS

2. Κληρονομήστε τη συσκευή παραθύρων namespace (συμπεριλαμβανομένου του καθορισμού των επιστολών κίνησης, COM λιμένες, et ainsi de suite και τα λοιπά)

3. Κληρονομήστε την προτεραιότητα μασκών και σελίδων συγγένειας διαδικασίας από τη διαδικασία γονέων. Εάν υπάρχει αριθ

η διαδικασία γονέων, η προτεραιότητα σελίδων προεπιλογής (5) χρησιμοποιείται, και μια μάσκα συγγένειας όλων των επεξεργαστών (KeActiveProcessors) χρησιμοποιείται

4. Θέστε το φραγμό ποσόστωσης της νέας διαδικασίας στη διεύθυνση του φραγμού ποσόστωσης της διαδικασίας γονέων του, και αύξηση η αρίθμηση αναφοράς για το φραγμό ποσόστωσης του γονέα. Εάν η διαδικασία δημιουργήθηκε κατευθείαν Το CreateProcessAsUser, αυτό το βήμα δεν θα εμφανιστεί

5. Το ελάχιστο και μέγιστο μέγεθος συνόλου επεξεργασίας τίθεται τις τιμές PspMinimumWorkingSet και PspMaximumWorkingSet, αντίστοιχα. Αυτές οι τιμές μπορούν να είναι εξαιρετικά σημαντικός εάν οι επιλογές απόδοσης διευκρινίστηκαν στο βασικό μέρος PerfOptions του αρχείου εικόνας Επιλογές εκτέλεσης, οπότε σ'αυτή την περίπτωση το μέγιστο σύνολο εργασίας λαμβάνεται από εκεί

(25)

6. Αποθηκεύστε την ταυτότητα διαδικασίας της διαδικασίας γονέων στον τομέα InheritedFromUniqueProcessId νέο αντικείμενο διαδικασίας

338 7. Συνδέστε τη διαδικασία με τη σύνοδο της διαδικασίας γονέων

8. Μονογράψτε το μέρος KPROCESS του αντικειμένου διαδικασίας. (Δείτε το στάδιο 3C.) 9. Δημιουργήστε το αρχικό σημείο πρόσβασης της διαδικασίας (ένα αντίγραφο του αρχικού σημείου του γονέα του)

Οι νέες διαδικασίες κληρονομούν το σχεδιάγραμμα ασφάλειας των γονέων τους. Εάν το CreateProcessAsUser η λειτουργία χρησιμοποιείται για να διευκρινίσει ένα διαφορετικό σημείο πρόσβασης για τη νέα διαδικασία, το σημείο είναι έπειτα αλλαγμένος κατάλληλα

10. Ο πίνακας λαβών διαδικασίας μονογράφεται. Εάν κληρονομήστε η σημαία λαβών τίθεται για το γονέα η διαδικασία, οποιεσδήποτε κληρονομικές λαβές αντιγράφεται από τον πίνακα λαβών αντικειμένου του γονέα στο νέο διαδικασία. (Για περισσότερες πληροφορίες για τους πίνακες λαβών αντικειμένου, δείτε το κεφάλαιο 3.) Μια ιδιότητα διαδικασίας μπορεί επίσης χρησιμοποιείται για να διευκρινίσει μόνο ένα υποσύνολο των λαβών, το οποίο είναι χρήσιμο όταν χρησιμοποιείτε CreateProcessAsUser για να περιορίσει ποια αντικείμενα πρέπει να κληρονομηθούν με τη διαδικασία παιδιών

11. Εάν οι επιλογές απόδοσης διευκρινίστηκαν μέσω του κλειδιού PerfOptions, αυτές εφαρμόζονται τώρα

Το κλειδί PerfOptions περιλαμβάνει αγνοεί για το όριο συνόλου εργασίας, I/O προτεραιότητα, προτεραιότητα σελίδων, και Κατηγορία προτεραιότητας ΚΜΕ της διαδικασίας

12. Η κατηγορία και το κβάντο προτεραιότητας διαδικασίας υπολογίζονται και τίθενται

13. Θέστε τη θέση εξόδων της νέας διαδικασίας σε STATUS_PENDING Στάδιο 3B: Δημιουργία του αρχικού διαστήματος διευθύνσεων διαδικασίας Το αρχικό διάστημα διευθύνσεων διαδικασίας αποτελείται από τις ακόλουθες σελίδες: ■ Κατάλογος σελίδων (και είναι δυνατό εκεί θα είναι περισσότερο από ένας για τα συστήματα με τους πίνακες σελίδων περισσότερα από δύο επίπεδα, όπως x86 τα συστήματα στον τρόπο PAE

(26)

ή τα εξηντατετράμπιτα συστήματα) ■ Σελίδα υπερδιαστημάτων ■ Κατάλογος λειτουργώντας συνόλου Για να δημιουργήσει αυτές τις τρεις σελίδες, τα ακόλουθα μέτρα λαμβάνονται: 1. Οι επιτραπέζιες καταχωρήσεις σελίδων δημιουργούνται στους κατάλληλους πίνακες σελίδων για να χαρτογραφήσουν τις αρχικές σελίδες

2. Ο αριθμός σελίδων αφαιρείται από τον πυρήνα μεταβλητό MmTotalCommittedPages και προστιθέμενος σε MmProcessCommit 3. Το σε όλο το σύστημα προεπιλογής μέγεθος συνόλου επεξεργασίας ελάχιστο (PsMinimumWorkingSet) είναι αφαιρεμένος από MmResidentAvailablePages

4. Οι επιτραπέζιες σελίδες σελίδων για η μερίδα του διαστήματος συστημάτων και η κρύπτη συστημάτων είναι ταξινομικός στη διαδικασία Στάδιο 3C: Δημιουργία του φραγμού διαδικασίας πυρήνων Το επόμενο στάδιο PspAllocateProcess είναι η έναρξη του φραγμού KPROCESS. Αυτό η εργασία εκτελείται από KeInitializeProcess, το οποίο περιέχει: ■ Ένας δείκτης σε έναν κατάλογο νημάτων πυρήνων. (Ο πυρήνας δεν έχει καμία γνώση λαβών, έτσι αυτό παρακάμπτει τον πίνακα αντικειμένου.) 339 ■ Ένας δείκτης στον επιτραπέζιο κατάλογο σελίδων της διαδικασίας (που χρησιμοποιείται για να παρακολουθήσει της διαδικασίας εικονικό διάστημα διευθύνσεων)

■ Ο συνολικός χρόνος τα νήματα της διαδικασίας έχει εκτελέσει

■ Ο αριθμός κύκλων ρολογιών τα νήματα της διαδικασίας έχει καταναλώσει

■ Η προτεραιότητα βάση-σχεδιασμού προεπιλογής της διαδικασίας (που αρχίζει όπως κανονική, ή 8, εκτός αν η διαδικασία γονέων τέθηκε ως στόχος να τεμπελιάσει ή κάτω από κανονικό, οπότε σ'αυτή την περίπτωση η ρύθμιση κληρονομείται)

■ Η συγγένεια επεξεργαστών προεπιλογής για τα νήματα στη διαδικασία

■ Η ανταλλαγή διαδικασίας δηλώνει (εδρεύων, έξω-ανταλλαγμένος, ή στη μετάβαση)

■ Ο ιδανικός κόμβος NUMA (αρχικά θέστε 0)

Referências

Documentos relacionados

Ως Μη Εμπορικήορίζεται η χρήση: • που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο • που δεν περιλαμβάνει