Έλεγχος ισχύος στα Windows. Έλεγχος ισχύος στην πορεία απόδοσης των Windows
Η απομόνωση του πυρήνα είναι μια τεχνολογία ασφαλείας που βασίζεται στην εικονικοποίηση, η οποία παρέχει ένα πρόσθετο επίπεδο προστασίας από τις ευφυείς επιθέσεις. Η ακεραιότητα της μνήμης είναι ένα από τα συστατικά της τεχνολογίας μόνωσης του πυρήνα - η λειτουργία προορίζεται να αποτρέψει την εισαγωγή κακόβουλου κώδικα σε διαδικασίες υψηλής ασφάλειας. Προστασία εξασφαλίζεται λόγω του γεγονότος ότι η σελίδα εικονικής μνήμης του πυρήνα ξεκινά μόνο μετά την επιτυχή μετάβαση του ελέγχου ακεραιότητας.
Εξετάστε το πώς να ενεργοποιήσετε τη λειτουργία "Integrity Memory" στα Windows 10 Απριλίου 2018 ενημέρωση για την ενίσχυση της ασφάλειας των υπολογιστών.
Ενεργοποιήστε την ακεραιότητα μνήμης
- Ανοίξτε το Κέντρο Ασφαλείας των Windows Defender.
- Επιλέξτε την ενότητα "Ασφάλεια συσκευής".
- Στην ενότητα "Τμήμα μόνωσης του πυρήνα", κάντε κλικ στο σύνδεσμο "Πληροφορίες μόνωσης πυρήνα".
- Μετακινήστε το διακόπτη ακεραιότητας μνήμης στην ενεργή θέση.
Μετά την ολοκλήρωση αυτών των ενεργειών, πρέπει να κάνετε επανεκκίνηση του υπολογιστή έτσι ώστε να ισχύουν οι αλλαγές.
Σημείωση: Για να λειτουργήσετε αυτή τη λειτουργία, ο επεξεργαστής σας πρέπει να υποστηρίξει τις τεχνολογίες εικονικοποίησης. Επιπλέον, η εικονικοποίηση πρέπει να είναι ενεργοποιημένη στο BIOS ή UEFI. Διαφορετικά, η λειτουργία δεν θα είναι διαθέσιμη.
Διόρθωση προβλημάτων μόνωσης πυρήνα
Σε ορισμένες περιπτώσεις, μπορείτε να αντιμετωπίσετε προβλήματα συμβατότητας σε ορισμένες εφαρμογές, εάν η απομόνωση του πυρήνα είναι ενεργοποιημένη. Για να διορθώσετε τα προβλήματα θα πρέπει να απενεργοποιήσετε τη λειτουργία.
Εάν προσπαθείτε να απενεργοποιήσετε την ακεραιότητα μνήμης στο Κέντρο Ασφαλείας του Windows Defender, αλλά η επιλογή έχει γίνει ανενεργή και το μήνυμα εμφανίζεται. "Αυτή η παράμετρος οδηγεί το διαχειριστή σας", τότε μπορείτε ακόμα να απενεργοποιήσετε τη λειτουργία χρησιμοποιώντας το μητρώο συστήματος.
Σημείωση: Η εσφαλμένη αλλαγή μητρώου μπορεί να οδηγήσει σε σοβαρά προβλήματα. Συνιστάται να δημιουργήσετε ένα αντίγραφο ασφαλείας του μητρώου των Windows πριν εκτελέσετε αυτά τα βήματα. Στο μενού Επεξεργαστή μητρώου, επιλέξτε Αρχείο\u003e Εξαγωγή για να αποθηκεύσετε το αντίγραφο ασφαλείας.
- Πατήστε το συνδυασμό πλήκτρων Windows + R για να εμφανιστεί το παράθυρο "Εκτέλεση".
- Εισαγάγετε το regedit και κάντε κλικ στο OK για να ξεκινήσετε τον επεξεργαστή μητρώου.
- Πηγαίνετε στον επόμενο τρόπο:
- Διπλό κλικ Ενεργοποιημένη..
- Αλλάξτε την τιμή από 1 έως 0.
- Κάντε κλικ στο OK.
Για να απενεργοποιήσετε, μπορείτε επίσης να χρησιμοποιήσετε το έτοιμο
Στείλτε την καλή δουλειά σας στη βάση γνώσεων είναι απλή. Χρησιμοποιήστε την παρακάτω φόρμα
Οι μαθητές, οι μεταπτυχιακοί φοιτητές, οι νέοι επιστήμονες που χρησιμοποιούν τη βάση γνώσεων στις σπουδές τους και τις εργασίες τους θα είναι πολύ ευγνώμονες σε εσάς.
Δημοσιεύτηκε στη διεύθυνση http://www.allbest.ru/
1. Θεωρητικές πληροφορίες
1.1 Ανάπτυξη προγραμμάτων οδήγησης πυρήνων των Windows
Σύντομες θεωρητικές πληροφορίες
Ανάπτυξη οδηγών πυρήνα
Ο οδηγός (από τον αγγλικό πρόγραμμα οδήγησης) είναι ένα πρόγραμμα ηλεκτρονικών υπολογιστών με το οποίο ένα άλλο πρόγραμμα (συνήθως λειτουργικό σύστημα) αποκτά πρόσβαση στο τυποποιημένο πρότυπο υλικού.
Σχηματικά, να δείξει πόσο διαφορετικοί τύποι οδηγών λειτουργούν:
Βολικά χωρισμένο σε 2 τύπους:
- Οι οδηγοί του πυρήνα (εργασία στο επίπεδο των προνομίων, αλλά δεν αλληλεπιδρούν με κανένα πρόγραμμα χρήστη, ούτε με τη συσκευή. Είναι από αυτούς θα ξεκινήσουμε (μπορούν επίσης να τους ωφελήσουν και τους).
Απαιτούνται προγράμματα οδήγησης συσκευών για να αλληλεπιδρούν μεταξύ του προγράμματος του χρήστη και της συσκευής, δηλαδή, να μεταδίδουν δεδομένα μεταξύ τους, να ελέγχουν τη συσκευή. Επιπλέον, οι συσκευές μπορούν να είναι πραγματικές και εικονικές). Ο οδηγός δεν χρειάζεται να διαχειρίζεται καμία φυσική συσκευή. Ορισμένο λειτουργικό σύστημα καθιστά δυνατή τη δημιουργία προγραμμάτων οδών εικονικών συσκευών - αντικειμένων που συμπεριφέρονται παρόμοια με / έξω συσκευές, αλλά δεν ανταποκρίνονται σε καμία φυσική συσκευή.
Τα συστατικά του πυρήνα εκτελούνται στη λειτουργία προνομιακού επεξεργαστή (που ονομάζεται Mode Kernel), μπορεί να εκτελέσει τα πάντα, δηλαδή:
- Μπορούν να εκτελέσουν εντολές προνομιακού επεξεργαστή (για παράδειγμα, LGDT),
- μπορεί να έχει πρόσβαση στα δεδομένα συστήματος και τον κώδικα,
- έχουν άμεση πρόσβαση στον εξοπλισμό, όπως οι λιμένες
- Να έχετε πρόσβαση σε κύτταρα μνήμης. Ο οδηγός δεν μπορεί να χειριστεί άμεσα τη φυσική μνήμη, αλλά μπορεί να πάρει μια εικονική διεύθυνση για οποιαδήποτε σωματική και να τα χειριστεί.
Εάν πρέπει να γράψετε σε κάποια σοβαρή εφαρμογή, να εργαστείτε με την πρόσβαση σε εσωτερικές λειτουργίες ή δομές δεδομένων συστήματος, μπορείτε να αντιμετωπίσετε ένα πλήθος περιορισμών, για να ξεπεραστούν οι οποίες μόνο οι εκπομπές του κώδικα σας στο χώρο διεύθυνσης του συστήματος. Από τα τεκμηριωμένα υπάρχει μόνο ένας τρόπος για να γίνει αυτό - να εγκαταστήσετε τον οδηγό. Αυτή η μέθοδος είναι σχετικά απλή, αξιόπιστη και κυρίως, εφοδιασμένη πλήρως με την υποστήριξη από το ίδιο το λειτουργικό σύστημα.
Ο κωδικός πυρήνα (στην πραγματικότητα αυτό είναι το ίδιο το σύστημα) θεωρείται ότι είναι εντελώς αξιόπιστη. Επομένως, η φόρτωση στο χώρο διεύθυνσης του συστήματος, ο οδηγός γίνεται μέρος του συστήματος και οι περιορισμοί δεν υπερτίθενται σε αυτό. Στα Windows, είναι σχεδόν ο μόνος τρόπος να γράψετε προγραμματιστές OS για να γράψετε συστατικά συστήματος του πυρήνα.
Το DDK (κιτ ανάπτυξης συσκευών) χρησιμοποιείται για να γράψει και να διερευνήσει μεθόδους ανάπτυξης οδηγών - το σύστημα ανάπτυξης οδηγών.
Εκτός από την τεκμηρίωση στο DDK, περιλαμβάνεται ένα σύνολο από αρχεία που περιλαμβάνονται (*. Εσωμαντικό) και αρχεία βιβλιοθήκης (* .lib).
Έτσι, τα Windows υποστηρίζουν διάφορα είδη προγραμμάτων οδήγησης συσκευών, αλλά, επιπλέον, υπάρχουν προγράμματα οδήγησης που δεν είναι προγράμματα οδήγησης συσκευών, αλλά απλά σας επιτρέπουν να δημιουργείτε προγράμματα που θα λειτουργούν στα Windows στη λειτουργία πυρήνα, δηλ. Στο επίπεδο των προνομίων. Ταυτόχρονα, έχουν πρόσβαση πλήρως στο λειτουργικό σύστημα και τον εξοπλισμό.
Εξετάστε το πιο απλό οδηγό λειτουργίας του πυρήνα.
#Περιλαμβάνω.
int driverentry (
Στο pdriver_object pdiverobject,
Στο pusregisticistrypath) (
}
Το σημείο εισόδου είναι η οδήγηση, η οποία είναι διακοσμημένη με τη μορφή μιας διαδικασίας που φιλοξενεί δύο παραμέτρους:
pDRiverObject - δείκτης στο αντικείμενο μόλις δημιουργήθηκε οδηγός. Με τη λήψη του προγράμματος οδήγησης, το σύστημα δημιουργεί το αντικείμενο οδηγού (αντικείμενο οδηγού), που αντιπροσωπεύει την εικόνα του προγράμματος οδήγησης στη μνήμη. Μέσω αυτού του αντικειμένου, το σύστημα ελέγχει το πρόγραμμα οδήγησης. Ο οδηγός είναι μια συνηθισμένη δομή δεδομένων τύπου Driver_Object.
pUSregistrypath - δείκτης στο κλειδί μητρώου που περιέχει επιλογές αρχικοποίησης οδηγού.
Αυτός ο πρώτος οδηγός μας είναι απλώς φορτωμένος στο σύστημα και αμέσως εκφορτωθεί.
Τώρα εξετάστε το πρόγραμμα προτύπου που θα χρειαστεί να χρησιμοποιηθεί για την ανάπτυξη ενός προγράμματος στο πρώτο βήμα της λειτουργίας του μαθήματος (οδηγός της λειτουργίας του πυρήνα του Beeper.sys).
Το έργο αυτού του οδηγού είναι να εκτελέσει μια σημείωση στο σύστημα δυναμικά στην πρώτη οκτάβα. Για να το κάνετε αυτό, ο οδηγός χρησιμοποιεί τις οδηγίες του επεξεργαστή μέσα και έξω, αναφερόμενοι στις αντίστοιχες θύρες I / O. Είναι γνωστό ότι η πρόσβαση στις θύρες I / O είναι ένας ιερός προστατευμένος πόρος συστήματος των Windows. Η προσπάθεια προσφυγής σε οποιοδήποτε από αυτά, τόσο η είσοδος όσο και η παραγωγή, από τη λειτουργία χρήστη, αναπόφευκτα οδηγεί σε εξαίρεση.
Στο παράδειγμά μας, ο ομιλητής θα λειτουργήσει (για αυτό, χρησιμοποιείται, ειδικότερα, θύρα 61h, 0 και 1 bits, θύρα 43h και 42h).
Στην αρχή του οδηγού ορίστηκε και τις 12 σημειώσεις.
Θα χρειαστεί να μην ενεργοποιήσετε απλά το ηχείο, αλλά να ρυθμίσετε τη συχνότητα ήχου. Αυτό χρησιμοποιεί ένα υποσύστημα χρονοδιακόπτη που λειτουργεί ανεξάρτητα από τον επεξεργαστή και έχει 3 κανάλια. Η έξοδος του καναλιού 2 σχετίζεται με το ηχείο, το οποίο χρησιμοποιείται για τη δημιουργία του ήχου διαφορετικής συχνότητας. Εύρος ήχου ακοής - 30Hz-6000Hz.
Για να ορίσετε τη συχνότητα ήχου στη θύρα 43h (Εγγραφή χρονοδιακόπτη) 0BH Έλεγχος Word:
mov Al, 0bh
out 43h, Al
Αυτή η τιμή καθορίζει τον αριθμό καναλιού που θα διαχειριστούμε, τον τύπο λειτουργίας, τη λειτουργία καναλιού και τη μορφή μετρητή.
Στη συνέχεια, η επανυπολογισμένη συχνότητα ήχου (1193167 / συχνότητα (Hz)) αποστέλλεται στη θύρα 42h (1193167 / συχνότητα (Hz) (το νεότερο μέρος είναι πρώτο, τότε το παλαιότερο).
Για παράδειγμα, θέλουμε να έχουμε τη συχνότητα ήχου των 100 Hz. Επανυπολογίστε τη συχνότητα
1193167/100 = 11931
Επειτα:
mOV AX, 11931
out 42h, Al
mov Al, Ah
out 42h, Al
Στο πρώτο βήμα της λειτουργίας του μαθήματος, πρέπει να αλλάξετε το πρόγραμμα έτσι ώστε να δίνει άλλους μουσικούς ήχους (έκαστο ανά επιλογή).
Συχνά, στα καθήκοντα που χρειάζεστε για να ορίσετε διαφορετικές διάρκειες. Για να το κάνετε αυτό, είναι βολικό να χρησιμοποιήσετε τη διαδικασία do_delay, περνώντας το έμμεσα μια συγκεκριμένη παράμετρο "ήχου".
Για να γίνει βολικό να διορθώσετε ένα πρόγραμμα οδήγησης, υπάρχουν διάφορα μέσα. Το απλούστερο είναι να ολοκληρωθεί με τις απαραίτητες πληροφορίες στο ειδικό παράθυρο της χρησιμότητας προβολής εντοπισμού σφαλμάτων. Προηγουμένως, το πρόγραμμα αυτό ξεκινά, διαμορφωμένο ώστε να παρεμποδίζει μηνύματα από τον πυρήνα. Για να εμφανίσετε το πρόγραμμα, η λειτουργία DBGPRINT καλείται, με μια παράμετρο - την έξοδο της συμβολοσειράς. Μετά την εκκίνηση του προγράμματος οδήγησης στο παράθυρο προβολής εντοπισμού σφαλμάτων, εμφανίζεται ολόκληρη η έξοδος.
Υπάρχουν διάφοροι τρόποι εγκατάστασης του οδηγού στον πυρήνα. Δεδομένου ότι ο οδηγός μας, στην πραγματικότητα, δεν είναι απαραίτητος, το σύστημα δεν είναι απαραίτητο (δεν οδηγεί οποιαδήποτε συσκευή), τότε θα συνδέσουμε προσωρινά το πρόγραμμα οδήγησης στο σύστημα και στη συνέχεια θα το διαγράψετε.
Για να το κάνετε αυτό, πρέπει να δημιουργήσετε μια εφαρμογή που θα εκτελέσει τον οδηγό. Πως? Ο οδηγός είναι η υπηρεσία επιπέδου πυρήνα. Επομένως, η εφαρμογή θα χρησιμοποιήσει τον διαχειριστή ελέγχου SCM - Service (Manager Control Manager), ο οποίος περιλαμβάνεται στα Windows και λειτουργεί στο επίπεδο χρήστη.
Έτσι, είναι απαραίτητο να οικοδομηθεί μια λύση από δύο έργα: εφαρμογή κονσόλας και οδηγός.
Για να αναπτύξετε προγράμματα οδήγησης μαζί σας πρέπει να είναι προ-:
- μέσο DDK,
- Εγκαταστήστε τη μεταβλητή περιβάλλοντος WNNBASE (PATH PATH PATH, για παράδειγμα, π.χ., E: \\ WINDDK \\ 3790.1830).
Το έργο με τον οδηγό πρέπει να είναι ένας τύπος μακιγιάζ.
Κάντε τις ρυθμίσεις του έργου χρησιμοποιώντας τις ρυθμίσεις εφαρμογής και στο πεδίο Build Command Line για να καταγράψετε μια συμβολοσειρά
ddkbuild -wnetxp chk. -CEZ.
Τι κάνει η πρόκληση ενός ειδικού σεναρίου για την επικοινωνία VC με το DDK
Ο τρέχων φάκελος του έργου πρέπει να περιέχει αρχεία:
Πηγές, makefile, ddkbuild.cmd (script), πρόγραμμα οδήγησης αρχείου πηγής.C
Μετά την οικοδόμηση ενός έργου, ο οδηγός πρέπει να έχει επέκταση. SYS.
Η εφαρμογή εγκαινιάζει το πρόγραμμα οδήγησης Beeper.sys, δηλ. Το καθορίζει στο μητρώο και εγκαινιάζει την εργασία. Στη συνέχεια, μετά την ολοκλήρωση, αφαιρεί από το μητρώο.
Για την εφαρμογή του οδηγού, μετά την οικοδόμηση μιας λύσης που αποτελείται από δύο έργα - εφαρμογές και οδηγούς, πρέπει να τοποθετήσετε το εκτελέσιμο αρχείο εφαρμογής και τον οδηγό σε ένα φάκελο και, στη συνέχεια, να ξεκινήσετε την εφαρμογή.
Οι οδηγοί είναι πολύ δύσκολο να εντοπιστούν. Σε περίπτωση σφαλμάτων στη λειτουργία, η λειτουργία είναι πιο συχνά κατάψυξη και απαιτείται επανεκκίνηση. Και για τον οδηγό μας, μετά την επανεκκίνηση, πρέπει επίσης να διαγράψετε την υπηρεσία Beeper06 από το μητρώο χρησιμοποιώντας το REGEDIT (HKEY_LOCAL_MACHINE \\ SYSTEM \\ CurrentConlset \\ Services \\) και, στη συνέχεια, επανεκκίνηση.
1.2 Οδηγοί εικονικής συσκευής Windows
Μέχρι τώρα, έχουμε αναπτύξει έναν οδηγό λειτουργίας πυρήνα που μπορεί να κάνει ό, τι δεν μπορεί να βρίσκεται στο επίπεδο του χρήστη, ειδικότερα, να συνεργαστεί με τις θύρες / εξόδου. Ένας τέτοιος οδηγός ονομάζεται οδηγός πυρήνα, αλλά όχι οδηγός συσκευής, επειδή τα δεδομένα μεταξύ του προγράμματος χρήστη και της συσκευής δεν μεταδίδονται (μετά από όλα, το πρόγραμμα οδήγησης είναι συνήθως απαραίτητο; Για να οργανώσετε την ανταλλαγή δεδομένων μεταξύ της εφαρμογής χρήστη και συσκευής).
Τώρα θα αναπτύξουμε οδηγούς συσκευών που μεταδίδουν δεδομένα και πίσω μεταξύ της εφαρμογής χρήστη και της συσκευής.
Όταν η εφαρμογή απαιτεί λειτουργία A / OUT, ο οδηγός απευθύνεται. Για να το κάνετε αυτό, η εφαρμογή μπορεί να δώσει ένα αίτημα για ανάγνωση δεδομένων από τη συσκευή ή να καταγράψει δεδομένα στη συσκευή. Και αν απαιτείται κάποια άλλη ενέργεια, για παράδειγμα, μια έρευνα ή έλεγχος της συσκευής, ή κάτι άλλο, το λεγόμενο χρησιμοποιείται για αυτό. IOCTL Interface (Control in-out).
Θα εξετάσουμε αυτή τη συγκεκριμένη περίπτωση για εικονικές συσκευές, επειδή συνήθως, γιατί χρειάζεστε μια εικονική συσκευή στον οδηγό; Έτσι ώστε να μπορείτε να μεταφέρετε τα δεδομένα της που ο οδηγός μπορεί με κάποιο τρόπο να επεξεργάζεται (όπως είναι αδύνατο στην εφαρμογή) και να επιστρέψει το αποτέλεσμα στην εφαρμογή. Θυμηθείτε ότι ο συνηθισμένος οδηγός πυρήνα, που συζητήθηκε νωρίτερα, δεν πήρε τίποτα από την εφαρμογή και δεν επέστησε τίποτα εκεί, αλλά απλά έκανε δράσεις απρόσιτες για την εφαρμογή.
Όταν η εφαρμογή απαιτεί λειτουργία A / OUT, ο οδηγός απευθύνεται. Αυτό μπορεί να χρησιμοποιηθεί από το λεγόμενο. IOCTL Interface (Control in-out).
Η εφαρμογή κλήσης εκτελεί τις ακόλουθες ενέργειες:
1) Άνοιγμα του αρχείου και τη λήψη του περιγραφέα πληροφορικής:
Generic_read + generic_write, 0, , open_existing, 0, null
Ως αποτέλεσμα, αν όλα συμβαίνουν με επιτυχία, λαμβάνουμε έναν περιγραφέα συσκευής.
2) Αποστολή οδηγού κίνησης εγκυρότητας (τι πρέπει να κάνετε, ο οδηγός μπορεί να υλοποιήσει πολλές διαφορετικές ενέργειες):
Επισημαίνει το DecomeioControl, τον περιγραφέα, τον κωδικό δράσης, τη διεύθυνση buffer, το μέγεθος των δεδομένων εισόδου, το μέγεθος των δεδομένων εισόδου, τη διεύθυνση απομόνωσης εξόδου, το μέγεθος της εξόδου, τη διεύθυνση buffer για έναν πραγματικό αριθμό bytes
3) Κλείσιμο του αρχείου και, κατά συνέπεια, η απελευθέρωση του περιγραφέα.
Επισημαίνει τον περιγραφέα συσκευής CloseHandle
Για τη μετάδοση δεδομένων, οι μονάδες (εφαρμογή και οδηγός) πρέπει να συμφωνήσουν στο πρωτόκολλο αλληλεπίδρασης (κωδικοί δράσης, τη δομή των ρυθμιστικών διαλύματος - εισόδου και εξόδου).
Ο ίδιος κωδικός δράσης χρησιμοποιείται επίσης στην εφαρμογή και στον οδηγό.
Ένας κωδικός δράσης στην εφαρμογή και στον οδηγό μπορεί να καταγραφεί σε μια 16-πτυσσόμενη μορφή και μπορείτε να χρησιμοποιήσετε τη μακροεντολή CTL_CODE, όπως γίνεται στο παράδειγμα του εργαστηρίου. Λειτουργεί στο αρχείο COUND.IC.
Εξετάστε ένα παράδειγμα ενός κώδικα δράσης από έναν οδηγό εικονικής συσκευής, το οποίο χρησιμοποιείται σε εργαστηριακή εργασία. Όνομα - ioctl_get.
Στην περίπτωση μιας εικονικής συσκευής, η σημαία αρχείου είναι 0.
Τύπος συσκευής - File_device_unknown \u003d 22 ώρες
Δικαιώματα πρόσβασης - file_read_access + file_write_access \u003d 1 + 2 \u003d 3 \u003d 11b
Λειτουργικός κώδικας - στην περιοχή από 800h έως fffh. Έχουμε 800h.
Μέθοδος συμπλέγματος - Μέθοδος μεταφοράς δεδομένων μεταξύ της εφαρμογής και του οδηγού (τρεις):
Για μια μικρή ποσότητα δεδομένων, χρησιμοποιείται συνήθως μέθοδος_Buffered (00b) - ένα επιπλέον ρυθμιστικό επισημαίνεται σε επαρκή μνήμη, επαρκή για την τοποθέτηση του ρυθμιστικού διαλύματος εισόδου και εξόδου. Η διεύθυνση αυτού του ρυθμιστικού διαλύματος βρίσκεται στο IRP στο πεδίο Antondirpp.Systembuffer. Ο ίδιος ο αποστολέας I / O αναλαμβάνει τη λειτουργία των δεδομένων επανεγγραφής μεταξύ του χρήστη και του πρόσθετου ρυθμιστικού διαλύματος.
Άμεση πρόσβαση δεδομένων (χωρίς buffer) - Μέθοδος_out_direct (2) - Για έξοδο είτε Metod_IN_Direct (1) - για είσοδο. Πεδίο από IRP - Mdladdress. Αυτή είναι μια άμεση κλήση - ο διαχειριστής / εξόδου καθορίζει τις φυσικές σελίδες που περιέχουν το ρυθμιστικό μέσου χρήστη. Ταυτόχρονα, δημιουργεί μια βοηθητική δομή του MDL (λίστα περιγραφών μνήμης) για να περιγράψει σταθερές σελίδες. Και ο προγραμματιστής οδηγών λειτουργεί με το MDL.
Πρόσβαση μέσω ρυθμιστικού διαλύματος επιπέδου χρήστη - Μέθοδος_Δεν, (3). Πεδίο από IRP - Systembuffer. Ο αποστολέας I / OFF στέλνει την εικονική διεύθυνση της λειτουργίας χρήστη στο πρόγραμμα οδήγησης. Και στον οδηγό πρέπει να εργαστείτε πολύ προσεκτικά, επειδή ο οδηγός σε αυτή την περίπτωση θα πρέπει να λειτουργεί μόνο στο πλαίσιο του καλούντος.
Όταν η εφαρμογή στέλνει τον οδηγό κώδικα δράσης, ξεκινά ο αποστολέας I / O. Είναι υπεύθυνο για τη δημιουργία ενός πακέτου ερωτήματος I / O (πακέτο αιτήματος I / O, IRP) και την αποστολή του στον οδηγό για περαιτέρω επεξεργασία.
Θα εξετάσουμε 3 τύπους αιτήσεων:
IRP_MJ_Create - θα μεταφερθεί με δημιουργία δημιουργίας,
IRP_MJ_DEVICE_CONTROL - θα μεταδοθεί με DecomonioControl
Ipr_mj_close - με closeHandle
Το πακέτο IRP αποτελείται από μια κεφαλίδα και στοίβες τοποθέτησης A / OUT. Ο / ο διαχειριστής εξόδου δημιουργεί τον αριθμό των ακτινοβολούμενων κυττάρων στοίβας ίσο με τον αριθμό των οδηγών που εμπλέκονται στην επεξεργασία αιτήσεων. Κάθε οδηγός επιτρέπεται πρόσβαση στο δικό του κελί στοίβας. Όταν ο οδηγός μεταδίδει το πακέτο IRP του οδηγού χαμηλότερου επιπέδου, ο δείκτης προς το κύτταρο στοίβας μετακινείται στο κύτταρο που είναι απαραίτητο για αυτό το πρόγραμμα οδήγησης. Και, αντίθετα, μετά την επεξεργασία του ερωτήματος, ο δείκτης ανεβαίνει στο κύτταρο κίνησης του υψηλότερου επιπέδου. Να πάρει έναν δείκτη χρησιμοποιώντας τη λειτουργία iogetcurrentStackLocation ().
Σε κάθε στοίβα τοποθέτησης υπάρχει ένας δείκτης στο αντικείμενο DeviceObject και στο αντικείμενο FileObject για το οποίο ξεκινάει το ερώτημα. Τα πακέτα IRP αποθηκεύονται πάντοτε σε αφόρητη μνήμη.
Τα παρακάτω αντικείμενα δημιουργούνται για τη λειτουργία του προγράμματος οδήγησης και ισχύουν:
Αντικείμενο οδηγού?
Συσκευές αντικειμένων.
Στάδια λειτουργίας του οδηγού.
1) Δημιουργία αντικειμένου οδηγού. Δημιουργήθηκε κατά τη φόρτωση του οδηγού στο στάδιο έναρξης. Αυτή τη στιγμή, η λειτουργία Drivereentry ξεκινά και η διάταξη της διαύκλισης γεμίζεται, καθώς και ένας δείκτης στο αντικείμενο της συσκευής και την πλάτη.
Η συσκευή περιλαμβάνει:
Τύπος συσκευής.
2) Δημιουργία συμβολικού συνδέσμου στη συσκευή. Προκειμένου το αντικείμενο "συσκευής" να είναι διαθέσιμο στον κωδικό λειτουργίας χρήστη, το πρόγραμμα οδήγησης πρέπει να δημιουργεί στον κατάλογο προσβάσιμων λειτουργιών χρήστη (λειτουργία χρήστη) "\\" Ένα άλλο αντικείμενο είναι ένας συμβολικός σύνδεσμος (συμβολικός σύνδεσμος). Το πρόγραμμα οδήγησης Shablon.sys δημιουργεί τη συμβολική σύνδεση Slshabloon στη συσκευή του "Devshablon" στον κατάλογο "\\ \\", η τιμή της οποίας είναι η συμβολοσειρά "\\ \\ \\ devshablow".
Έτσι, ήδη κατά τη φόρτωση του προγράμματος οδήγησης (στην περίπτωσή μας, στο στάδιο λήψης του OS), έχουμε τρία αντικείμενα στη μνήμη: οδηγός "\\ driver \\ shablon", συσκευή "\\ device \\ shablon" και ένας συμβολικός σύνδεσμος στη συσκευή " \\ Slshoblon ".
3) Άνοιγμα. Περαιτέρω, όταν ξεκινήσει η εφαρμογή, καλείται δημιουργία. Υπάρχει ένας σύνδεσμος προς τη συσκευή. Από τη δομή της συσκευής συσκευής_Object, οι πληροφορίες ανακτώνται πληροφορίες σχετικά με τη μονάδα συντήρησης. Ο αποστολέας I / O σχηματίζει το IRP I / O Package Package Package IRP_MJ_Create και το κατευθύνει για να οδηγεί. Έτσι ο οδηγός μαθαίνει ότι ο κωδικός λειτουργίας χρήστη προσπαθεί να έχει πρόσβαση στη συσκευή του. Εάν ο οδηγός δεν έχει τίποτα έναντι, τότε επιστρέφει τον κώδικα επιτυχίας. Ο οδηγός μας έχει μια ειδική διαδικασία αποστολής που ανταποκρίνεται σε αυτό το IRP - DispatchCreSeclose (υπάρχει μια συνδυασμένη διαδικασία για το άνοιγμα και το κλείσιμο της συσκευής). Στο πεδίο io.status.status μεταδίδεται από το status_success, και στο io.status.information - 0, επειδή Σε αυτή την περίπτωση, τίποτα δεν χρειάζεται να μεταδοθεί. Μια τέτοια απάντηση από τον οδηγό είναι ένα σήμα στον αποστολέα αντικειμένων για τη δημιουργία ενός εικονικού αρχείου. Ταυτόχρονα, δημιουργείται ένα νέο στοιχείο με δείκτη στο αντικείμενο "αρχείου" στον πίνακα περιγραφικού (πίνακας χειρισμού) και ένας νέος περιγραφέας επιστρέφεται στη λειτουργία χρήστη.
Εάν όλα είναι εντάξει, τότε αποθηκεύουμε τον περιγραφέα αρχείων, που επιστρέφουμε δημιουργία, στη μεταβλητή HDEvice.
4) Λειτουργίες καπακιού. Τώρα έχουμε την ευκαιρία να διαχειριστούμε τη λειτουργία αυτής της συσκευής, καλώντας τις λειτουργίες DomonuiooControl. Δεδομένου ότι ο οδηγός της συσκευής μπορεί, κατ 'αρχήν, να εκτελέσει πολλά διαφορετικά καθήκοντα, είναι απαραίτητο να διαφοροποιηθούν με κάποιο τρόπο να διαφοροποιηθούν. Για το σκοπό αυτό, η δεύτερη παράμετρος dwiocontrolcode προορίζεται, ονομάζεται κωδικός ελέγχου κώδικα ελέγχου I / O (κωδικός ελέγχου I / O), ο οποίος είναι κατασκευασμένος σύμφωνα με ορισμένους κανόνες.
Χρησιμοποιώντας τον περιγραφέα της συσκευής, η αποστολή I / O θα λάβει πληροφορίες σχετικά με το πρόγραμμα οδήγησης εξυπηρέτησης, θα σχηματίσει ένα πακέτο ρώτησης I / O τύπου IRP_MJ_DEVICE_Control και το κατευθύνει για να οδηγήσει. Ο οδηγός θα προκληθεί από την αντίστοιχη διαδικασία DispatchControl, την οποία μεταδίδονται οι κωδικοί δράσης και οι πληροφορίες σχετικά με τις διευθύνσεις και το μέγεθος του ρυθμιστικού διαλύματος εισόδου και εξόδου ως παράμετροι. Όλα αυτά μεταδίδονται μέσω IRP. Η διαδικασία IRP λαμβάνει τις απαραίτητες πληροφορίες: ένας κωδικός δράσης, μια διεύθυνση buffer δεδομένων.
Η διαδικασία DispatchControl εκτελεί τις απαραίτητες ενέργειες, στην περίπτωσή μας, η διεύθυνση πακέτου IRP από το μητρώο ESI στη συνέχεια μεταδίδει το αποτέλεσμα μέσω του ρυθμιστικού εξόδου στην εφαρμογή.
Παρόμοια με την προηγούμενη διαδικασία, περνούν μέσω της κατάστασης τερματισμού του IRP και τον αριθμό των bytes που μεταδίδονται από τον οδηγό.
Στην εφαρμογή, αυτά τα δεδομένα είναι μορφοποιημένα και έξοδο.
5) κλείσιμο. Δεδομένου ότι θα πρέπει να αντιμετωπίζεται με περιγραφείς, τα οποία δεν χρειάζονται πλέον, καλώντας τη λειτουργία closeHandle, κλείνοντας τον περιγραφέα της συσκευής.
6) Εκφόρτωση οδηγού. Διαγράψτε έναν συμβολικό σύνδεσμο και διαγράψτε το αντικείμενο της συσκευής.
Το συγκρότημα (2) αποτελείται από δύο προγράμματα:
Η εφαρμογή που αναφέρεται στον οδηγό πίσω από τη διεύθυνση IRP και, στη συνέχεια, αυτή η διεύθυνση εμφανίζει τα Windows στο πρότυπο παράθυρο.
Shablon.sys - οδηγός.
Ο οδηγός Shablon δεν κάνει στο επίπεδο του χρήστη, στην περίπτωση αυτή ορίζει τα περιεχόμενα του μητρώου ESI κατά τη διάρκεια του προγράμματος οδήγησης.
Η εφαρμογή στο Buffer Output λαμβάνει τα περιεχόμενα του ESI, το μετατρέπει στην έξοδο σε δεκαεξαδικό και εμφανίζει τα Windows στο πρότυπο παράθυρο.
Εάν πρέπει να λαμβάνετε πληροφορίες από την CMOS στον οδηγό, τότε απαιτείται:
Στείλτε στο Port 70h Offset στο CMOS, το οποίο μας ενδιαφέρει.
Χαμηλή καθυστέρηση.
Πάρτε από τις πληροφορίες του λιμένα 71h στο al.
Στη συνέχεια, γράψτε αυτές τις πληροφορίες στο ρυθμιστικό εξόδου.
Και στην εφαρμογή πρέπει να λάβετε πληροφορίες από το buffer output, εάν χρειάζεται, να το μετατρέψετε και να εμφανίσετε ή να αναλύσετε και, ανάλογα με το αποτέλεσμα, εμφανίστε το απαραίτητο κείμενο στο πρότυπο παράθυρο.
Σε αυτή την εργαστηριακή εργασία θεωρείται ότι ο οδηγός είναι εγκατεστημένος συνεχώς στα Windows χρησιμοποιώντας το αρχείο .inf Το αρχείο χρησιμοποιώντας το στοιχείο για να εγκαταστήσετε τον εξοπλισμό από τον πίνακα ελέγχου: Προσθήκη νέας συσκευής, Εγκατάσταση από το δίσκο, επιλέξτε όλες τις συσκευές, file.inf (Ο οδηγός πρέπει να είναι στον ίδιο φάκελο).
Για να βεβαιωθείτε ότι ο οδηγός έχει οριστεί, επιλέξτε το σύστημα, τον εξοπλισμό, τον διαχειριστή συσκευών στον πίνακα ελέγχου.
1.3 Πρόσβαση σε υπάρχοντες οδηγούς από εφαρμογές του καθεστώτος χρήστη
Ο αλγόριθμος της εφαρμογής του οδηγού που συνεργάζεται με τον οδηγό
Για να συνεργαστείτε με τον οδηγό του οδηγού, πρέπει να πάρετε ένα πρόγραμμα οδήγησης χειρισμού (λαβή). Αυτός ο χειριστής μπορεί να ληφθεί χρησιμοποιώντας τη λειτουργία Createfile ή Createfilea API που λειτουργεί με χαρακτήρες ASCII. Περαιτέρω χρησιμοποιεί τη λειτουργία API DomumonioControl, η οποία, ως μία από τις παραμέτρους, ο κωδικός IOCTL μεταδίδεται. Ο κωδικός IOCTL είναι ένας κώδικας διαχείρισης με τον οποίο ο οδηγός θα μάθει σχετικά με τη λειτουργία, η εκτέλεση του οποίου ζητά την εφαρμογή, τη μέθοδο των παραμέτρων μετάδοσης και τα δικαιώματα πρόσβασης που απαιτείται η εφαρμογή αυτής της λειτουργίας. Μετά την προκληθείσα εφαρμογή
Το DroperioControl Drive αποστέλλεται IRP_MJ_DEVICE_CONTROL. Μετά την ολοκλήρωση της επεξεργασίας, οι αιτήσεις εφαρμογής επιστρέφουν τη διαχείριση και η εφαρμογή παραμένει η ανάλυση της απόκρισης του οδηγού και των στενών ανοικτών περιγραφών.
Παράδειγμα
Στο παρακάτω παράδειγμα, η εφαρμογή λειτουργίας χρήστη στέλνει το πρόγραμμα οδήγησης συστήματος του συστήματος ioctl_disk_get_partition_info_ex query_ex, αναλύει τις πληροφορίες που λαμβάνει και εμφανίζει τη μορφή του διαμερίσματος σκληρού δίσκου.
#Περιλαμβάνω.
#Περιλαμβάνω.
int _tmain (int ARGC, _TCHAR * ARGV)
Dword dwbytesreturned \u003d 0;
char cpartitionstyle \u003d (0);
Partition_information_ex pipartitionInfo;
Χειριστείτε hdevice \u003d createfilea (
/*1*/"\\\\\\\\\\\\\\
/ * 2 * / generic_read | Generic_write
/ * 3 * / file_share_read | File_share_write,
/ * 5 * / open_existing,
αν (hdevice \u003d\u003d invalid_handle_value)
MessageBoxa (NULL, "Createfilea Error!", "Σφάλμα", 0).
αν (DecomoniooControl (
/ * 1 * / (λαβή) hdevice,
/ * 5 * / & PipartitionInfo,
/ * 6 * / Μέγεθος (PipartitionInfo),
/ * 7 * / & dwbytesreturned,
αν (PipartitionInfo.PartitionStyle \u003d\u003d partition_style_mbr)
Messageboxa (, "partition_style_mbr", "λεζάντα", 0);
Αλλιώς εάν (PipartitionInfo.PartitionStyle \u003d\u003d partition_style_gpt)
Messageboxa (, "partition_style_gpt", "λεζάντα", 0).
Messageboxa (, "partition_style_raw", "λεζάντα", 0).
MessageBoxa (NULL, "Σφάλμα DecomonioControl", "Σφάλμα", 0).
CloseHandle (hdevice);
Τοποθετήστε ένα παράδειγμα
Οι μεταβλητές που απαιτούνται για την εφαρμογή ανακοινώνονται. Το Partition_information_ex είναι μια δομή που περιγράφει τις πληροφορίες σχετικά με το τμήμα σκληρού δίσκου.
typedef struct (
) Partition_information_ex;
Σε αυτό το μέρος του προγράμματος, η λειτουργία Createfilea καλείται να λάβει έναν χειριστή, το οποίο είναι γραμμένο στη μεταβλητή Hdevice.
Η λειτουργία DecomonioConLol ονομάζεται συγχρονισμένος. Μεταδίδεται:
Συσκευή περιγραφής;
Ioctl κωδικός ioctl_disk_get_partition_info_ex;
δείκτης στο buffer εισόδου, null στην περίπτωσή μας.
Μέγεθος ρυθμιστικού διαλύματος εισόδου.
Δείκτης στο ρυθμιστικό εξόδου.
Μέγεθος ρυθμιστικού εξόδου.
Δείκτης στη μεταβλητή τύπου DWORD στην οποία θα αποθηκευτεί ο αριθμός των επιστροφών Bytes.
Ο δείκτης στην επικαλυπτόμενη δομή, η οποία χρησιμοποιείται για μια ασύγχρονη κλήση λειτουργίας.
Μετά την επιστροφή του ελέγχου, σε περίπτωση επιτυχούς ολοκλήρωσης της λειτουργίας, στη δομή Partition_information_ex, το τμήμα αποθηκεύεται.
Η ανάλυση και η έξοδος γίνεται. Πριν επιστρέψετε τη διαχείριση του λειτουργικού συστήματος, μπορείτε να κλείσετε ανοιχτά περιγραφείς. Αυτό σας επιτρέπει να κάνετε τη λειτουργία closechle (__ στη λαβή). Εάν οι περιγραφείς δεν κλείνουν, τότε αυτό θα κάνει το λειτουργικό σύστημα για εσάς.
2. Εκτέλεση μαθημάτων
2.1 Βήμα 1.
Το έργο: 1. Αναπτύξτε έναν οδηγό πυρήνα με πρόσβαση σε θύρες, εκτελώντας ενέργειες σύμφωνα με μια επιλογή και πληροφορίες εξόδου στο παράθυρο View Debug (προαιρετικό), καθώς και μια εφαρμογή που εκτελεί τον οδηγό.
Καταχώρηση kurs_test.cpp.
#Include "stdafx.h"
#Include "Windows.h"
#include "stdlib.h"
Sc_handle hscmanager?
Sc_handle hservice;
char acdriverpath;
αν (HSCManager! \u003d 0) (
// Εγγραφή του παίκτη στον πίνακα αποστολής Scmanager
αν (hservice! \u003d 0) (
// Διαγραφή εγγραφής οδηγού
Deleteservice (hservice);
CloseserviceHandle (HService).
Επιστροφή 0;
}
Καταχώρηση beeper.sys
#Περιλαμβάνω.
#Define timer_frequency 1193167 // 1,193,167 Hz
#Define pitch_c 523 // 523,25 Hz
#Define pitch_cs 554 // 554,37 Hz
#Define pitch_d 587 // 587,33 Hz
#Define pitch_ds 622 // 622,25 Hz
#Define pitch_e 659 // 659,25 Hz
#Define pitch_f 698 // 698,46 Hz
#Define pitch_fs 740 // 739,99 Hz
#Define pitch_g 784 // 783,99 Hz
#Define pitch_gs 831 // 830,61 Hz
#Define pitch_a 880 // 880.00 Hz
#Define pitch_as 988 // 987,77 Hz
void do_delay (Ώρα INT) (
Μακρύς, j;
για (i \u003d 0; i<=time*0xfffff; i++) {}
}
void do_big_delay (Ώρα INT) (
Do_delay (2 * ώρα);
}
Κενό ξυλόφωνο (int npitch) (
int ntone \u003d timer_frequency / npitch
_asm (
mOV AL, 10110110B; // Εγγραφή μιας λέξης ελέγχου στο 43h
Έξω 43h, al; // κανάλι ελέγχου ήχου - λογικό διάγραμμα χρησιμοποιώντας χρονοδιακόπτη τόνου και ελεγχόμενο λογισμικό θύρας συστήματος συστήματος
mOV EAX, NTONE; // Εγγραφή από την εγγραφή συχνότητας στο 42
out 42h, al; // senior
mov Al, Ah; // Junior
out 42h, Al
Στο al, 61h; // αλλάξτε την ακολουθία ελέγχου - ο μετασχηματισμός των τελευταίων δυαδικών ψηφίων ανά μονάδα
· // bit 0 - άδεια χρήσης ομιλητών
· // Bit 1 - Χρονόμετρο άδειας σύνδεσης-2 στο ηχείο
ή al, 00000011b; Ομιλητής.
out 61h, al
}
Do_delay (0x7f);
_asm (
σε al, 61h
και al, 11111100b; Απενεργοποιημένο ηχείο.
out 61h, al
}
}
Xylophone (Pitch_c);
Xylophone (Pitch_s);
Xylophone (Pitch_s);
Xylophone (Pitch_s);
Xylophone (Pitch_s);
Xylophone (Pitch_s);
Xylophone (Pitch_s);
Επιστροφή status_device_configuration_error;
}
2.2 Βήμα 2.
Αναπτύξτε ένα πρόγραμμα οδήγησης εικονικής συσκευής που σας επιτρέπει να εκτελέσετε ενέργειες διαθέσιμες μόνο στο μηδενικό επίπεδο των προνομίων (σύμφωνα με την επιλογή) και, στη συνέχεια, μεταφέρετε τα αποτελέσματα στην εφαρμογή σε 3 επίπεδα προνομίων για να τις εμφανίσετε στην οθόνη.
Η εφαρμογή εμφανίζει το αποτέλεσμα στο πρότυπο παράθυρο των Windows.
Listing Shablon.c.
#Περιλαμβάνω. // Διάφοροι ορισμοί NT
#Περιλαμβάνω.
Unicode_string g_usdevicename;
Unicode_string g_ussymboliklinkname?
Κενό οδήγησης (στο pdriver_object pdiverobject) (
IodeletesymboliclinkLink (& g_ussymboliclinkname);
IODELETEDEVIE (PDRIVEROBJECT-\u003e DEVICEOBJECT);
}
NTSTATUS DispatchCreSeclose (Pdevice_Object PdeviceObject, PIRP PIRP) (// MJ_Create MJ_CLOSE Επεξεργασία
piRP-\u003e iostatus.status \u003d status_success;
pIRP-\u003e iostatus.information \u003d 0;
IOCULLETEREREQUEST (PIRP, IO_NO_INCRENT);
Επιστρέψτε το status_success;
}
Ntstatus dispatchcontrol (pdevice_object pdeviceobject, pip piPP) (// επεξεργασία IRP_MJ_Devicecontrol
Κατάσταση ntstatus;
iNT REGESI.
// Πάρτε ένα δείκτη στο io_stack_location, σε αυτό στο iocontrolcode
Εάν (PIRP-\u003e TAIL.OVERLAY.CURRENTSCACELOCATECH-\u003e PARAMETERS.DEVICEICONTROL.IOCONTROLCODE \u003d\u003d iOCTL_GET) (
// Συγκρίνετε τον κώδικα της ενέργειας και αν είναι ο πελάτης μας, τότε:
_asm (
mOV EAX, 0
mov Al, 10h
out 70h, al
στο al, 71h
cbw.
cwde.
mOV REGESI, EAX
}
// Αυτή είναι η λειτουργικότητά μας - παίρνουμε το περιεχόμενο του μητρώου ESI
// γράψτε το στο buffer του συστήματος
* ((INT *) PIRP-\u003e AN αριθμού) \u003d regesi;
pIRP-\u003e iostatus.Information \u003d 4; // και ορίστε το μέγεθος του αποτελέσματος
Κατάσταση \u003d status_success;
) Αλλιώς κατάσταση \u003d status_invalid_device_request;
pIRP-\u003e iostatus.status \u003d κατάσταση;
IOCULLETEREREQUEST (PIRP, IO_NO_INCRENT);
Επιστροφή (κατάσταση);
}
int Drowerentry (στο Pdriver_Object PdriverObject, στο Pusricode_string Pusregistrypath) (
Κατάσταση ntstatus;
Pdevice_object pdeviceobject;
// Αρχικοποιήστε τις γραμμές Unicode
Rtlinitunicodestring (& g_usdevicename, l "\\\\ συσκευή \\\\ devget");
Rtlineiticodestring (& g_ussymboliklinkname, l "\\\\ \\\\ sldevget");
// Συμπληρώστε το αντικείμενο του οδηγού - εξηγήστε πλέον κατανοητά τον οδηγό που διαθέτει τις διαδικασίες
pdriverObject-\u003e Driverununload \u003d
pDRiverObject-\u003e Μεγέθυνση \u003d
pDRiverObject-\u003e Μεγέθυνση \u003d
pDRiverObject-\u003e Μεγέθυνση \u003d
// Δημιουργήστε ένα λογικό αντικείμενο μιας εικονικής συσκευής
Κατάσταση \u003d iocreAseedevice (PDViverObject, 0, & G_USDEVICENAME, File_device_unknown, 0, False & PdeviceObject);
Αν (! Nt_success (κατάσταση)) (κατάσταση επιστροφής;)
// Δημιουργήστε έναν συμβολικό σύνδεσμο στη συσκευή
Κατάσταση \u003d iocreaSymbolicLink (& g_ussymboliclinkname, & g_usdevicename);
Αν (! Nt_success (κατάσταση)) (
Iodeletevice (pdeviceobject);
Κατάσταση επιστροφής.
}
Κατάσταση επιστροφής.
}
Καταχωρίστε το μάθημα2.CPP
#Include "stdafx.h"
#Include "Windows.h"
#include "stdlib.h"
#Define ioctl_get ctl_code (file_device_unknown, 0x800, method_buffered, file_read_access + file_write_access)
int _tmain (int argc, _tchar * agnv) (
Χειριστείτε το hdevice.
Bool devcontrol;
Dword dwnetesrentured?
char stroka;
/*
Παράμετροι:
lpfilename τη διεύθυνση της συμβολοσειράς μηδενικού σκορ που ορίζει το όνομα του αντικειμένου για να το δημιουργήσει ή να ανοίξει.
dwdesiedaccess είδος εμπορευμάτων στο αντικείμενο. Αυτή η παράμετρος μπορεί να πάρει οποιοδήποτε συνδυασμό των ακόλουθων τιμών:
Σημασία: Περιγραφή:
0 Καθορίζει ένα αίτημα για τη διαθεσιμότητα ενός αντικειμένου στην καθορισμένη συσκευή. Η εφαρμογή μπορεί να ζητήσει τα χαρακτηριστικά της συσκευής, χωρίς πρόσβαση σε αυτήν.
Generic_read ορίζει την πρόσβαση ανάγνωσης από το αντικείμενο. Τα δεδομένα μπορούν να διαβαστούν από το αρχείο και ο δείκτης αρχείου μπορεί να μετακινηθεί. Συνδυάστε με generic_write για πρόσβαση στην ανάγνωση-εγγραφή.
Generic_write ορίζει την πρόσβαση σε ένα αντικείμενο. Τα δεδομένα μπορούν να εγγραφούν σε ένα αρχείο και μπορεί να μετακινηθεί ένας δείκτης αρχείου. Συνδυάστε με το Generic_Read για να αποκτήσετε πρόσβαση σε Read-Write.
demsharemode ο τρόπος κοινόχρηστης πρόσβασης στο αντικείμενο. Με μηδενικές τιμές, το αντικείμενο δεν μπορεί να χρησιμοποιηθεί με πολλά προγράμματα. Όλες οι επακόλουθες λειτουργίες του αντικειμένου θα αποτύχουν έως ότου κλείσει ο περιγραφέας του αντικειμένου. Για να μοιραστείτε το αντικείμενο, χρησιμοποιήστε ένα συνδυασμό των ακόλουθων τιμών:
Σημασία: Περιγραφή:
Το File_share_delete επιτρέπει μια ακολουθία αντικειμένων ανοιχτού λειτουργιών για να ζητήσει πρόσβαση στην κατάργηση.
Το αρχείο_share_read επιτρέπει μια ακολουθία λειτουργιών ανοίγματος για να ζητήσει την πρόσβαση ανάγνωσης.
Το αρχείο_share_write επιτρέπει μια ακολουθία λειτουργιών ανοίγματος για να ζητήσει μια καταχώρηση
lpsecurityattributes τη διεύθυνση της δομής ασφαλείας_attributes, η οποία καθορίζει εάν ο περιγραφέας που επιστρέφεται από τη λειτουργία πρέπει να κληρονομείται από μια παιδική διαδικασία.
Εάν το lpsecurityttributes είναι ίσο με το , ο περιγραφέας δεν μπορεί να κληρονομηθεί.
Νίκη
Σημασία: Περιγραφή:
Το Create_always δημιουργεί ένα νέο αρχείο, πάντα.
Εάν υπάρχει το αρχείο, η λειτουργία αντικαθιστά το αρχείο.
Create_new δημιουργεί ένα νέο αρχείο. Η λειτουργία θα ολοκληρωθεί με σφάλμα αν υπάρχει το αρχείο.
Open_always ανοιχτό αρχείο, πάντα. Εάν το αρχείο δεν υπάρχει, η συνάρτηση το δημιουργεί με τον ίδιο τρόπο αν η κατοικία θα είναι creative_new.
Το Open_Existing ανοίγει το αρχείο. Η λειτουργία θα ολοκληρωθεί με σφάλμα εάν το αρχείο δεν υπάρχει.
Το Truncate_existing ανοίγει το αρχείο και το κόβει στο μηδενικό μέγεθος. Η λειτουργία θα ολοκληρωθεί με σφάλμα εάν το αρχείο δεν υπάρχει.
dwflagsandattributes Σημαίες και χαρακτηριστικά αρχείων.
Όταν ανοίγει ένα υπάρχον αρχείο, ο Createfile αγνοεί το αρχείο προτύπου.
Επιστροφή τιμών:
Εάν η λειτουργία είναι επιτυχής, η ανοιχτή λαβή του καθορισμένου αρχείου επιστρέφεται. Εάν το καθορισμένο αρχείο υπάρχει πριν καλέσετε τη λειτουργία και η παράμετρος της νάξας είναι ίση με τη δημιουργία_always ή open_always, η κλήση GetLasterRor θα επιστρέψει το ERROR_ALREADY_EXISTS, ακόμα και αν η λειτουργία είναι επιτυχής. Εάν το αρχείο δεν υπάρχει πριν από την κλήση, ο Getlastterterror θα επιστρέψει 0 (μηδέν).
Σε περίπτωση σφάλματος, η λειτουργία θα επιστρέψει Invalid_Handle_Value. Για περισσότερες πληροφορίες σφάλματος, καλέστε το GetLastterRor.
*/
αν (hdevice! \u003d 0) (
/*
Η Hdevice είναι μια λαβή, έχτισε το δημιουργικό "ohm".
Το dwiocontrolcode είναι μια τιμή που καθορίζει το αδιαφανές που πρέπει να εκτελεστεί.
Το Lpinbuffer είναι ένα συγκολλητικό bouffer, το οποίο παρέχεται από τα δεδομένα που απαιτούνται για την εκτέλεση της λειτουργίας που καθορίζεται στο dwiocontrolcode. Εάν η οπωρώνα δεν αμαυρώνει τα δεδομένα, μπορείτε να μετακινήσετε το NULL.
Το Ninbuffersize είναι ένα pazmp στα δεδομένα bytes στο μπουκέτο, το οποίο ο Lpinbuffer καθορίζει πάνω στους οποίους.
Το Lpoutbuffer είναι ένα συγκολλητικό bouffer, το οποίο θα απελευθερωθεί από την έξοδο όταν το The Wavend είναι επιτυχημένο. Εάν η οπαδός δεν καθορίζει την έξοδο, αυτό το πεδίο θα πρέπει να είναι null "y.
Το Noutbuffersiz είναι ένα Pazmp στις bytes του κάδου, το οποίο lpoutbuffer δείχνει σε ποια.
lPBYTESETURENED - ADPES ενός DWWWRED DWORD PEDIGREE, το οποίο θα λάβει δεδομένα σχετικά με τα δεδομένα που περιλαμβάνονται στο Lpoutbuffer.
Το LpoverLapped είναι ένα Overapad Strupp, αν θέλετε η λειτουργία να είναι ασύγχρονη. Εάν θέλετε να περιμένετε μέχρι να εκτελεστεί το OP, τοποθετήστε το NULL σε αυτό το πεδίο.
*/
wSPRINTF ((LPSTR) Stroka, "% Χ", Adwoutbuffer); // Εγγραφή συμβολοσειράς στο Buffer (Adwoutbuffer -\u003e Stroka)
CloseHandle (hdevice);
Επιστροφή 0;
}
Πρόγραμμα υπολογιστών πυρήνα οδηγού
2.3 Βήμα 3.
Καταχώρηση μαθήματος.CPP
#Περιλαμβάνω.
#Περιλαμβάνω.
#Περιλαμβάνω.
{
DWORD Junk?
0, // Χαρακτηριστικά αρχείου
Επιστροφή (FALSE).
}
0, // Μέγεθος του ρυθμιστικού διαλύματος εισόδου
CloseHandle (hdevice);
Επιστροφή (Bresult).
}
iNT MAIN (INT ARGC, Char * ARGV)
{
/*
typedef struct (
Partition_style partitystyle? // μορφή ενότητας
Large_integer εκκίνηση. // μετατόπιση του τμήματος έναρξης
Large_integer διαχωριστικό μήκος? // τμήμα μεγέθους
Dwwword partitionnumber. // αριθμός ενότητας
Boolean RewritePartition; // Εάν η ενότητα αντικατασταθεί αλήθεια
Ένωση (
Partition_information_mrb mbr; // Πρόσθετες πληροφορίες Τμήμα στυλ MBR
Partition_information_gpt GPT; // Πρόσθετες πληροφορίες GPT διαμέρισμα στυλ
};
) Partition_information_ex;
*/
Bool bresult?
("Παύση").
Επιστροφή ((int) bresult).
}
2.4 Βήμα 4.
1) Συνδυάστε όλες τις λειτουργίες που έχουν σχεδιαστεί στα βήματα 1-3, σε ένα σύμπλεγμα προγράμματος.
Το τελικό συγκρότημα πρέπει να μοιάζει με αυτό:
- Ο οδηγός μας είναι ενσωματωμένος στο σύστημα και φορτώνεται στο στάδιο εκκίνησης των Windows.
- Η αίτηση ζητά τον οδηγό για τον οδηγό (που καθορίζεται στο βήμα 2) πληροφορίες, ο οδηγός μεταδίδει αυτές τις πληροφορίες και το ηχείο ενεργοποιείται επίσης για λίγο και η μελωδία αναπαράγεται (που καθορίζεται στο βήμα 1). Στη συνέχεια, η εφαρμογή απαιτεί πρόγραμμα οδήγησης σε ένα υπάρχον στο σύστημα (σύμφωνα με την επιλογή στο βήμα 3).
2) Να γίνει επεξηγηματική σημείωση στην οποία πρέπει να περιγραφούν και τα 4 στάδια, καθώς και θεωρητικές πληροφορίες για κάθε στάδιο.
#Include "stdafx.h"
#Include "Windows.h"
#include "stdlib.h"
#Define ioctl_get ctl_code (file_device_unknown, 0x800, method_buffered, file_read_access + file_write_access)
Bool getpartitionnumber (partition_information_ex * pex)
{
Χειριστείτε το hdevice. // Περιγραφέας της συσκευής που ελέγχεται
Bool bresult? // πλαίσιο ελέγχου
DWORD Junk?
hDEVICE \u003d Createfile (κείμενο ("\\\\\\\\\\ \\\\ C:"), // Ανοιχτή συσκευή
Generic_read | Generic_write, // Πρόσβαση στη συσκευή
File_share_read | file_share_write, // Λειτουργία κοινής χρήσης
Null, // Χαρακτηριστικά ασφαλείας από προεπιλογή
Open_existing, // Θέση
0, // Χαρακτηριστικά αρχείου
Μηδενικό); // Μην αντιγράφετε χαρακτηριστικά αρχείου
αν (hdevice \u003d\u003d invalid_handle_value) (// δεν μπορεί να ανοίξει τη συσκευή
printf ("Createfile () απέτυχε! \\ N");
Επιστροφή (FALSE).
}
bresult \u003d DeviceioControl (HDEvice, // Dealthed Device
Ioctl_disk_get_partition_info_ex, // λειτουργία
Null, // δείκτης στο buffer εισόδου
0, // Μέγεθος του ρυθμιστικού διαλύματος εισόδου
pEX, μέγεθος (* pex), // buffer εξόδου
& junk, // αριθμός επιστρεφόμενων bytes
(Lpoverlapped) null) · // Συγχρονισμός I / O (I / O)
CloseHandle (hdevice);
Επιστροφή (Bresult).
}
int _tmain (int argc, _tchar * agnv) (
Sc_handle hscmanager?
Sc_handle hservice;
char acdriverpath;
Χειριστείτε το hdevice.
Bool devcontrol;
Dword dwnetesrentured?
Lpvoid adwinbuffer, adwoutbuffer?
char stroka;
Partition_information_ex pex; // Δομή συσκευής
Bool bresult?
hdevice \u003d createfile ("\\\\\\\\\\ \\\\ sldevget", generic_read + generic_write, 0, , open_existing, 0, null);
αν (hdevice! \u003d 0) (
Devcontrol \u003d DeviceioControl (Hdevice, ioctl_get, & adwinbuffer, μέγεθος (adwinbuffer), & adwoutbuffer, μέγεθος (adwoutbuffer), & dwbytesretured, null);
αν ((Devcontrol! \u003d 0) && (dwbytesreturned! \u003d 0)) (
wSPRINTF ((LPSTR) Stroka, "% Χ", Adwoutbuffer); // Εγγραφή συμβολοσειράς στο Buffer (Adwoutbuffer -\u003e Stroka)
Εάν (Stroka \u003d\u003d "00000100") Messagebox (NULL, "Βρέθηκε 1,44 MB", "Yermakov FDD Scaner", MB_OK).
Άλλοι μηνύματα (NULL, "δεν βρέθηκε", "Yermakov FDD Scaner", MB_OK).
hscmanager \u003d openscmanager (, , sc_manager_create_service);
αν (HSCManager! \u003d 0) (
Getfullpathname ("beeper.sys", μέγεθος acdriverpath, acdriverpath, null);
// Εγγραφή του μουσικού σε πίνακες SCM
hSRVICE \u003d CreateService (HSCManager, "Beeper11", "Ωραίο Melody Beeper11,
Service_start + delete, service_kernel_driver, service_demand_start,
Service_error_ignore, acdriverpath, , , , , null);
αν (hservice! \u003d 0) (
StartService (HService, 0, Null).
Deleteservice (hservice);
CloseserviceHandle (HService).
) Αλλιώς το MessageBox (NULL, "μπορεί" Τ Εγγραφείτε πρόγραμμα οδήγησης ", NULL, MB_ICONSTOP).
CloseserviceHandle (HSCManager).
) ELSTEDBOX (NULL, "μπορεί να συνδεθεί με το SCManager", Null, MB_IConstop).
) ELSEDBOX (NULL, "μπορεί" t να στείλει τον κωδικό ελέγχου ", , mb_ok);
CloseHandle (hdevice);
) ELSEDBOX (NULL, "DEV δεν είναι παρόν", Null, MB_IConstop).
bresult \u003d getpartitionnumber (& pex);
αν (Bresult) (Prints ("PartitionNumber \u003d% D \\ N", Pex.PartitionNumber);
) Αλλιώς (Printf ("GetPartitionNumber () απέτυχε. Σφάλμα% d. \\ N", GetLasterRor ());).
("Παύση").
Επιστροφή ((int) bresult).
}
3. Αίτηση εργασίας
Εικόνα 3.1. Οδηγός από το βήμα 2
Εικόνα 3.2. Βήμα 3 οδηγός
Δημοσιεύτηκε στο Allbest.ru.
Παρόμοια έγγραφα
Μηχανισμοί αλληλεπίδρασης της λειτουργίας του πυρήνα και της εφαρμογής χρήστη: Αρχιτεκτονική πολλαπλών στροφών, Αλγόριθμος αλγορίθμου, Αλγόριθμος οδηγού και εφαρμογής, διεπαφή χρήστη για πρόσβαση αρχείων σε αρχεία.
Εργασία μαθημάτων, προστέθηκαν 06/23/2009
Windows NT I / O Αρχιτεκτονική. Εσωτερική οργάνωση λεωφορείου USB. Βασικά χαρακτηριστικά του μοντέλου οδήγησης WDM. Σημεία σύνδεσης του ανεπτυγμένου οδηγού, τοποθέτηση κώδικα στη μνήμη, εγκατάσταση του οδηγού στο σύστημα. Εφαρμογή του κωδικού οδηγού στο C.
Το μάθημα προστέθηκε 09/27/2014
Η δομή του τρόπου χρήσης που παρέχει τη δυνατότητα χρήσης του χρήστη για να αλληλεπιδράσει με το σύστημα. Περιγραφή της λειτουργίας του πυρήνα, η οποία εξασφαλίζει ασφαλή εκτέλεση εφαρμογών (προγράμματα) του χρήστη. Αφαίρεση υλικού Windows NT.
Παρουσίαση, πρόσθεσε 23.10.2013
Ο πυρήνας των Windows 98. Ο ρόλος των μονάδων πυρήνα 16 bit. Προβλήματα απόδοσης. Συνεταιρισμός και εκτοπιστική πολλαπλών εργασιών. Βελτιωμένη χρήση πόρων στα Windows 98. Χρήση του WordArt. MS Outlook Express: Δημιουργία και αποστολή μηνυμάτων.
Εξέταση, προστέθηκε 14.04.2005
Η κοινή λειτουργία όλων των συσκευών υπολογιστών και η πρόσβαση στους πόρους της. Η έννοια και η λειτουργία του λειτουργικού συστήματος γραφικών των Windows. Γραφείο βοήθειας των Windows. Διαχείριση συστήματος αρχείων. Τεχνολογία "Plug and Play". Windows Γραφική διεπαφή.
Εργασίες δοκιμής, προστέθηκαν 01/22/2011
Χαρακτηριστικά του λειτουργικού συστήματος. Την ιστορία της ανάπτυξης των Windows. Συγκριτική έκδοση των εκδόσεων των Windows. Στοιχεία και εργαλεία των Windows XP. Προγράμματα εφαρμογής στα Windows XP. Εργασία επιφάνειας εργασίας και φορητοί υπολογιστές που εκτελούν παράθυρα.
Έκθεση, προστέθηκαν 10/16/2011
Χρησιμοποιώντας τον οδηγό λειτουργίας του πυρήνα και την εφαρμογή ελέγχου για τη δημιουργία σπειρωμάτων συστήματος. Απομίμηση επεξεργασίας δεδομένων και διοργάνωση καθυστερήσεων. Αναπτύξτε έναν οδηγό στο C ++. Διαμόρφωση του πάγκου δοκιμής. Ακρίβεια αλλαγής καθυστερήσεων και λειτουργίας χρονοδιακόπτη.
Εργασία μαθήματος, πρόσθεσε 24.06.2009
Διευθυντής εσωτερικών παραθύρων δομής των Windows. Αρχιτεκτονική NT είναι δομή πυρήνα. Μέθοδοι ανακατασκευής του Funkii στο καθεστώς του πυρήνα του Κρύου καθεστώς. Υποτιμά στον οδηγό. Πακέτο εισόδου-Villode. Otsіnka stab_lnosti tu beepes συστήματα των Windows.
Μαθήματα, προστέθηκαν 02.01.2014
Έννοια, τύποι και εργασία τείχους προστασίας. Ενσωματωμένο τείχος προστασίας των Windows. Windows XP SP2, πρόσβαση στις ρυθμίσεις του τείχους προστασίας των Windows XP Service Pack 2. Windows Vista, επιτρέπεται η κυκλοφορία. Windows 7, Ρυθμίσεις για ενεργά προφίλ. Προσωπικό τείχος προστασίας, επίπεδα δοκιμών.
Περίληψη, προστέθηκαν 11/19/2010
Γνωριμία με τα τεχνικά χαρακτηριστικά ενός προσωπικού υπολογιστή. Εγκατάσταση του λειτουργικού συστήματος και των προγραμμάτων οδήγησης των Windows 7. Οι μέθοδοι καθαρισμού των Windows XP Professional SP3. Μέθοδοι αποκατάστασης του λειτουργικού συστήματος. Κάνοντας το Microsoft Office 2010.
Η Microsoft στο λειτουργικό σύστημα των Windows 10 δίνει ιδιαίτερη προσοχή στην ασφάλεια. Ένα από τα σημαντικά στοιχεία του συστήματος είναι ο "υπερασπιστής των Windows", αλλά μπορεί να αντιμετωπίσει όχι με όλες τις απειλές. Ειδικότερα, κερδίζει πρόσφατα μια ειδική επικράτηση των ιών Ransomware, οι πιο διάσημες μετενσάρκωση των οποίων είναι κακόβουλες προγράμματα PETYA και. Η Microsoft έχει εφαρμόσει στα Windows 10 την απομόνωση του πυρήνα και την ακεραιότητα της μνήμης που αποσκοπούν στην καταπολέμηση των ιών rlansomware. Από προεπιλογή, είναι απενεργοποιημένα.
Πίνακας περιεχομένων:Τι είναι η μόνωση του πυρήνα και η ακεραιότητα της μνήμης
Απομόνωση του πυρήνα - Πρόκειται για μια πρόσθετη διαδικασία προστασίας, η οποία παρέχεται από τη μέθοδο περίφραξης των διαδικασιών του υπολογιστή από το λειτουργικό σύστημα και τη συσκευή. Λόγω αυτών των ενεργειών, είναι δυνατόν να αποφευχθεί η υπονόμευση της λειτουργίας του λειτουργικού συστήματος όταν οι ιοί στον υπολογιστή χτύπησαν.
Ακεραιότητα μνήμης - Πρόκειται για μια ταυτόχρονη απομόνωση της λειτουργίας προστασίας του πυρήνα, η οποία αποσκοπεί στον περιορισμό της πρόσβασης από άγνωστα δυνητικά επικίνδυνα προγράμματα σε διαδικασίες υψηλού επιπέδου.
Σημαντικό: Η λειτουργία απομόνωσης του πυρήνα μπορεί να λειτουργήσει μόνο εάν υπάρχουν επαρκείς προϋποθέσεις για αυτό στο τμήμα του υλικού του υπολογιστή. Στις ρυθμίσεις του BIOS, η τεχνολογία Virtualization θα πρέπει να είναι ενεργή, σε βάρος του οποίου ο υπολογιστής των Windows 10 μπορεί να εκτελέσει διάφορες εφαρμογές σε ένα εικονικό δοχείο, περιορίζοντας την πρόσβαση από τα βασικά συστατικά του συστήματος.
Πώς να ενεργοποιήσετε τη μόνωση του πυρήνα και την ακεραιότητα της μνήμης
Οι παράμετροι του λειτουργικού συστήματος των Windows 10 σας επιτρέπουν να διαχειρίζεστε πλήρως τις λειτουργίες ασφαλείας σε έναν υπολογιστή. Μέσω των ρυθμίσεων των Windows 10, μπορείτε να ενεργοποιήσετε τη μόνωση του πυρήνα και την ακεραιότητα της μνήμης ως εξής:
Όπως σημειώθηκε παραπάνω, εάν το στοιχείο υλικού του υπολογιστή δεν υποστηρίζει τη δυνατότητα εικονικοποίησης, αυτή η λειτουργία δεν θα λειτουργήσει. Όταν ενεργοποιήσετε το χρήστη, θα δείτε το μήνυμα στην κάτω δεξιά γωνία. "Δεν είναι δυνατή η εξασφάλιση της ακεραιότητας της μνήμης. Πιθανή ασυμβατότητα. " Εάν εμφανιστεί αυτό το μήνυμα, συνιστάται να μεταβείτε στο BIOS και να δείτε αν η λειτουργία ασφαλούς εκκίνησης είναι ενεργοποιημένη (λειτουργία εκκίνησης).
Πώς να απενεργοποιήσετε τη μόνωση του πυρήνα και την ακεραιότητα της μνήμης
Νέα χαρακτηριστικά στο λειτουργικό σύστημα που επηρεάζουν σοβαρά το έργο του, ο διακινδυνεύει πάντα η αιτία των προβλημάτων κατά την εργασία. Δεν υπάρχει εξαίρεση και λειτουργία της απομόνωσης του πυρήνα. Οι χρήστες που έχουν ήδη δοκιμάσει, γιορτάζουν στα φόρουμ της Microsoft, οι οποίες αντιμετωπίζουν προβλήματα κατά τη λειτουργία ενός αριθμού παιχνιδιών και προγραμμάτων. Ο μόνος τρόπος για την επίλυση αυτού του προβλήματος είναι να απενεργοποιήσετε τη λειτουργία μόνωσης του πυρήνα και την ακεραιότητα της μνήμης. Ίσως στις μελλοντικές ενημερώσεις, οι προγραμματιστές εφαρμογών ή η Microsoft θα διορθώσουν αυτή την ασυμβατότητα.
Υπάρχουν 3 τρόποι για να απενεργοποιήσετε τη μόνωση του πυρήνα και την ακεραιότητα της μνήμης:
Διευθυντής Power Manager (Manager Power) Το μάτι δεν κατεβαίνει από τη χρήση της ηλεκτρικής ενέργειας σε όλο το σύστημα. Ιστορικά, η διαχείριση κατανάλωσης ενέργειας συνίστατο στην αποσύνδεση της οθόνης και η διακοπή της περιστροφής των δίσκων. Αλλά αυτό το πρόβλημα γίνεται γρήγορα πιο δύσκολο - λόγω των απαιτήσεων για την αύξηση της διάρκειας των φορητών υπολογιστών από τις μπαταρίες, καθώς και τις εκτιμήσεις της εξοικονόμησης ενέργειας στους επιτραπέζιους υπολογιστές (οι οποίοι επιτρέπονται μόνιμα) και υψηλό κόστος με ηλεκτρική ενέργεια που καταναλώνεται διακομιστή εκμεταλλεύσεις.
Τα νέα εργαλεία διαχείρισης ενέργειας περιλαμβάνουν τη μείωση της κατανάλωσης ενέργειας από τα εξαρτήματα όταν το σύστημα δεν χρησιμοποιείται, για αυτό, οι μεμονωμένες συσκευές μεταβείτε στην κατάσταση δημιουργίας αντιγράφων ασφαλείας ή ακόμα και εντελώς αποσυνδεδεμένα (χρησιμοποιώντας το διακόπτη ισχύος). Τα συστήματα πολλαπλών επεξεργαστών απενεργοποιούν μεμονωμένους επεξεργαστές όταν δεν χρειάζονται, και ακόμη και μπορούν να μειώσουν τη συχνότητα του ρολογιού του επεξεργαστή (για τη μείωση της κατανάλωσης ενέργειας). Όταν ο επεξεργαστής είναι ανενεργός, η κατανάλωση ενέργειας μειώνεται επίσης, δεδομένου ότι δεν χρειάζεται να κάνει τίποτα εκτός από την προσδοκία της εμφάνισης διακοπής.
Τα Windows υποστηρίζουν μια ειδική λειτουργία τερματισμού που ονομάζεται Hibernation (Hybernation), στην οποία αντιγράφεται ολόκληρη η φυσική μνήμη στο δίσκο και στη συνέχεια η κατανάλωση ενέργειας μειώνεται στο ελάχιστο (στο σύστημα φορητών υπολογιστών αδρανοποίησης μπορεί να λειτουργήσει για εβδομάδες), ενώ η μπαταρία χρεώνεται ελάχιστο. Δεδομένου ότι ολόκληρη η κατάσταση μνήμης καταγράφεται στο δίσκο, μπορείτε ακόμη και να αντικαταστήσετε τη μπαταρία του φορητού υπολογιστή (ενώ βρίσκεται σε αδρανοποίηση). Όταν το σύστημα συνεχίσει την εργασία του, αφήνοντας την αδρανοποίηση, αποκαθιστά την αποθηκευμένη κατάσταση μνήμης (και επανεκτιμοποιεί τις συσκευές). Αυτό φέρνει τον υπολογιστή στην ίδια κατάσταση στην οποία βρισκόταν μπροστά στην αδρανοποίηση (χωρίς να χρειάζεται να καταχωρεί και να εκτελέσει όλες τις εφαρμογές και τις υπηρεσίες που εκτελέστηκαν. Τα Windows προσπαθούν να βελτιστοποιήσουν αυτή τη διαδικασία, αγνοώντας τις μη τροποποιημένες σελίδες (έχοντας πλεονασμό δίσκου) και Συμπίεσε τις σελίδες μνήμης ανάπαυσης για να μειώσει τον απαιτούμενο αλγόριθμο I / O. Ο αλγόριθμος αδρανοποίησης παρέχει αυτόματο εύρος ζώνης του εύρους ζώνης και του συστήματος επεξεργαστή. έτσι ώστε με ένα υψηλότερο εύρος ζώνης επεξεργαστή, να μειώσει την ανάγκη για μια απόδοση συστήματος I / O, χρησιμοποιείται περισσότερη εντατική σε πόρους, αλλά πιο αποτελεσματικά χρησιμοποιείται. Συμπίεση δεδομένων. Ένα επαρκές εύρος ζώνης του συστήματος εισόδου / εξόδου σάς επιτρέπει να αποφύγετε τη συμπίεση κατά τη μετάβαση στη λειτουργία αδρανοποίησης. Όταν χρησιμοποιείτε τους πολυπροπόρους της τελευταίας γενιάς, την είσοδο στην κατάσταση αδρανοποίησης και το η έξοδος από αυτό μπορεί να είναι μόνο λίγα δευτερόλεπτα, ακόμη και αν η επιχειρησιακή μπορεί να είναι Τα συστήματα έχουν μεγάλο όγκο.
Εναλλακτική λύση - κατάσταση αναμονής, στην οποία ο διαχειριστής ισχύος μεταφράζει ολόκληρο το σύστημα στη χαμηλότερη κατάσταση κατανάλωσης ενέργειας (ακριβώς τόσο μεγάλη ενέργεια χρησιμοποιείται όπως απαιτείται για την αναγέννηση της δυναμικής κατάστασης μνήμης). Δεδομένου ότι η μνήμη δεν χρειάζεται να αντιγραφεί στο δίσκο, τότε η μετάβαση σε αυτή την κατάσταση σε ορισμένα συστήματα πραγματοποιείται ταχύτερα από την αδρανοποίηση.
Παρά τη διαθεσιμότητα της αδρανοποίησης και της προσδοκίας, πολλοί χρήστες δεν ξεφορτώνουν τη συνήθεια να στρέφουν τον προσωπικό τους υπολογιστή στο τέλος της εργασίας.
Η αδρανοποίηση χρησιμοποιείται στα Windows για την εφαρμογή των ψευδο-shudders της έναρξης, που ονομάζεται Hiberboot, η οποία πραγματοποιείται πολύ ταχύτερα από το συνηθισμένο κλείσιμο και εκτόξευση. Όταν ο χρήστης δίνει το σύστημα για να απενεργοποιηθεί, η Hiberboot εμφανίζει το χρήστη από το σύστημα και στη συνέχεια μεταφράζει την στην κατάσταση αδρανοποίησης σε αυτό το σημείο με το οποίο θα είναι δυνατόν να συνδεθείτε ξανά. Αργότερα, όταν ο χρήστης ενεργοποιεί ξανά το σύστημα, η Hiberboot θα επαναλάβει τη λειτουργία του συστήματος από το σημείο εισόδου του χρήστη. Για έναν χρήστη, όλα αυτά μοιάζουν με πολύ γρήγορο τερματισμό, καθώς τα περισσότερα από τα βήματα αρχικοποίησης του συστήματος παραλείπονται. Φυσικά, μερικές φορές το σύστημα πρέπει να απενεργοποιηθεί πραγματικά για να εξαλείψει τα προβλήματα ή να ορίσετε την ενημέρωση του πυρήνα. Εάν το σύστημα λάβει μια εντολή επανεκκίνησης και όχι το κλείσιμο, μεταφέρει αυτό το κλείσιμο και εκτελεί το συνηθισμένο φορτίο.
Αναμένεται ότι οι υπολογιστικές συσκευές σε τηλέφωνα και υπολογιστές tablet, καθώς και σε νέες γενιές φορητών υπολογιστών, θα καταναλώνουν πάντα μια μικρή ποσότητα ηλεκτρικής ενέργειας. Για να εξασφαλίσετε μια τέτοια λειτουργία, στα σύγχρονα παράθυρα εφάρμοσε μια ειδική έκδοση της διαχείρισης ενέργειας, η οποία ονομάζεται CS (συνδεδεμένη αναμονή - αναμονή για λειτουργία σύνδεσης). Το CS είναι δυνατό σε συστήματα με ειδικό εξοπλισμό σύνδεσης δικτύου ικανό να παρακολουθεί την κυκλοφορία σε ένα μικρό σύνολο συνδέσεων, χρησιμοποιώντας πολύ λιγότερη ενέργεια από ό, τι όταν ο κεντρικός επεξεργαστής λειτουργεί. Αποδεικνύεται ότι το σύστημα CS είναι πάντα ενεργοποιημένο, η έξοδος από το CS πραγματοποιείται αμέσως μόλις ο χρήστης έχει ενεργοποιηθεί στην οθόνη. Η αναμονή σε λειτουργία σύνδεσης είναι διαφορετική από τη συνήθη κατάσταση αναμονής, επειδή το σύστημα CS θα βγεί επίσης από την προσδοκία όταν λαμβάνει ένα πακέτο από την παρακολούθηση σύνδεσης. Αφού αρχίσει να καθίσει η μπαταρία, το σύστημα CS μεταβαίνει στην κατάσταση αδρανοποίησης για να αποφύγει την πλήρη απόρριψη της μπαταρίας και την πιθανή απώλεια δεδομένων χρηστών.
Η επίτευξη του έργου της μπαταρίας απαιτεί όχι μόνο τόσο συχνά από τον επεξεργαστή. Είναι επίσης σημαντικό όσο το δυνατόν περισσότερο η συγκράτηση του επεξεργαστή στην κατάσταση εκτός λειτουργίας. Ο εξοπλισμός δικτύου συστήματος CS επιτρέπει στους επεξεργαστές να παραμείνουν εκτός λειτουργίας πριν από την παραλαβή των δεδομένων, αλλά η πρόσληψη του επεξεργαστή μπορεί να προκληθεί από άλλα συμβάντα. Τα προγράμματα οδήγησης συσκευών Windows που βασίζονται στα Windows, οι υπηρεσίες συστήματος και οι ίδιοι οι ίδιοι συχνά ξεκινούν χωρίς ειδικό λόγο, μόνο για να ελέγξουν την κατάσταση των περιπτώσεων. Μια τέτοια δραστηριότητα έρευνας βασίζεται συνήθως σε ρυθμίσεις χρονοδιακόπτη για περιοδικό κώδικα εκκίνησης στο σύστημα ή εφαρμογή. Μια έρευνα βασισμένη σε σήματα χρονοδιακόπτη μπορεί να κάνει μια εργασία σε εκδηλώσεις, συμπεριλαμβανομένου ενός επεξεργαστή. Για να αποφύγετε αυτό στα σύγχρονα παράθυρα από τέτοιους χρονομετρητές, πρέπει να καθορίσετε την παράμετρο σφάλματος που επιτρέπει στο λειτουργικό σύστημα να συνδυάζει τα συμβάντα χρονοδιακόπτη και να μειώσει τον αριθμό των μεμονωμένων βάσεων για να ενεργοποιηθεί ο επεξεργαστής. Τα παράθυρα καταρτίζονται επίσης τις συνθήκες υπό τις οποίες η εφαρμογή που δεν βρίσκεται στο στάδιο της ενεργού εκτέλεσης μπορεί να εκτελέσει τον κώδικα στο παρασκήνιο. Λειτουργίες όπως οι έλεγχο ενημερώσεων ή αναζωογονητικού περιεχομένου δεν μπορούν να εκτελεστούν μόνο στην αρχή της λήξης του χρονοδιακόπτη. Η εφαρμογή πρέπει να υπακούει στο λειτουργικό σύστημα σε θέματα αυτής της δραστηριότητας του φόντου. Για παράδειγμα, ο έλεγχος για ενημερώσεις πρέπει να εμφανίζεται μόνο μία φορά την ημέρα ή την επόμενη φορά που θα εμφανιστεί η μπαταρία στη συσκευή. Ένα σύνολο διαμεσολαβητών συστήματος παρέχει διάφορες συνθήκες που μπορούν να χρησιμοποιηθούν για τον περιορισμό της δραστηριότητας υποβάθρου. Εάν η εργασία φόντου απαιτεί πρόσβαση σε φτηνό δίκτυο ή προσαρμοσμένες δυνάμεις, οι μεσάζοντες δεν θα εκτελέσουν την εργασία μέχρι να προκύψουν οι απαραίτητες προϋποθέσεις.
Σήμερα, πολλές εφαρμογές εφαρμόζονται τόσο με έναν τοπικό κώδικα όσο και με υπηρεσίες στο σύννεφο. Τα Windows παρέχουν υπηρεσία ειδοποιήσεων των Windows (υπηρεσία ειδοποιήσεων των Windows (WNS), επιτρέποντας τις υπηρεσίες τρίτων μερών να ωθήσουν τις ειδοποιήσεις στη συσκευή των Windows στο CS χωρίς να απαιτείται ειδικά εξοπλισμός δικτύου CS ειδικά πακέτα από διακομιστές τρίτων. Οι ειδοποιήσεις WNS ενδέχεται να ειδοποιήσουν τα θερμά κρίσιμα συμβάντα, όπως ένα μήνυμα κειμένου ή μια κλήση VoIP. Όταν παραληφθεί το πακέτο WNS, ο επεξεργαστής θα πρέπει να ενεργοποιήσει για επεξεργασία, αλλά ο εξοπλισμός του δικτύου CS έχει τη δυνατότητα να διακρίνει μεταξύ της κυκλοφορίας διαφορετικών συνδέσεων, πράγμα που σημαίνει ότι ο επεξεργαστής δεν πρέπει να συμπεριληφθεί σε απάντηση σε κάθε αυθαίρετο πακέτο που προέρχονται από τη διεπαφή δικτύου.