Λειτουργικά συστήματα

Γνώση Υπολογιστών >> Λειτουργικά συστήματα >  >> Windows Vista

Πώς δίνετε πρόσβαση προγράμματος στο μητρώο των Windows στο Vista;

Δεν υπάρχει ενιαία ενέργεια "Give Access". Η πρόσβαση στο μητρώο των Windows στο Vista (και όλες οι μεταγενέστερες εκδόσεις των Windows) απαιτεί κατάλληλες πρακτικές κωδικοποίησης και κατάλληλα προνόμια. Ο έλεγχος λογαριασμού χρήστη του συστήματος (UAC) θα περιορίσει την πρόσβαση εκτός εάν το πρόγραμμά σας εκτελείται με αυξημένα προνόμια ή ο χρήστης χορηγεί ρητά άδεια.

Ακολουθεί μια κατανομή του τρόπου χειρισμού της πρόσβασης μητρώου στο Vista, εστιάζοντας στις βασικές εκτιμήσεις:

1. Κατανόηση του ελέγχου λογαριασμού χρήστη (UAC):

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

2. Προσεγγίσεις προγραμματισμού (επεξηγηματικά παραδείγματα - Προσαρμογή στη γλώσσα σας):

Η συγκεκριμένη μέθοδος εξαρτάται από τη γλώσσα προγραμματισμού σας (C ++, C#, Python, κλπ.). Η βασική αρχή παραμένει η ίδια:χρησιμοποιείτε τα API του λειτουργικού συστήματος για να αλληλεπιδράσετε με το μητρώο.

* C# (.net): Χρησιμοποιήστε το χώρο ονομάτων `microsoft.win32.registry`. Αυτό παρέχει μαθήματα όπως το `RegistryKey 'για να ανοίξει, να διαβάσει και να γράψει κλειδιά και τις τιμές μητρώου. Βασικά, χειρίζεστε πιθανές εξαιρέσεις (όπως το `UnauredizedAccessException ') εάν το πρόγραμμα δεν έχει τα απαραίτητα δικαιώματα.

`` `csharp

χρησιμοποιώντας το microsoft.win32;

// ... άλλος κωδικός ...

δοκιμή

{

Χρήση (registryKey Key =Registry.Localmachine.OpenSubKey (@"λογισμικό \ myApplication", true)) // true για πρόσβαση εγγραφής

{

αν (κλειδί! =null)

{

// Διαβάστε μια τιμή

τιμή συμβολοσειρά =(string) key.getValue ("mysetting");

// γράψτε μια τιμή (απαιτεί αυξημένα προνόμια αν δεν είναι ήδη στο πλαίσιο του χρήστη)

key.setValue ("mysetting", "newvalue");

}

αλλού

{

// Το κλειδί δεν βρέθηκε

}

}

}

Catch (μη εξουσιοδοτημένη AccessException Ex)

{

// χειριστείτε την εξαίρεση - ίσως εμφανίστε ένα μήνυμα στον χρήστη που υποδεικνύει ανεπαρκή προνόμια

Console.WriteLine ("Η πρόσβαση αρνήθηκε:" + ex.message);

}

`` `

* C ++: Χρησιμοποιήστε τις λειτουργίες Win32 API όπως το `regcreatekeyex ', το regopenkeyex', το regsetValueEx ', το regqueryvalueex' και το regclosey». Αυτές οι λειτουργίες απαιτούν προσεκτικό χειρισμό κωδικών σφαλμάτων. Θυμηθείτε να ελέγξετε τις τιμές επιστροφής για σφάλματα, ειδικά `error_access_denied`.

* Python: Χρησιμοποιήστε την ενότητα "Winreg` (Python 2) ή" Winreg` (Python 3). Παρόμοια με το C#, θα συναντήσετε εξαιρέσεις `PermissionError 'εάν απορριφθεί η πρόσβαση.

3. Ζητώντας ανυψωμένα προνόμια (αν είναι απαραίτητο):

Εάν το πρόγραμμά σας * χρειάζεται * να γράψει σε κλειδιά μητρώου σε επίπεδο συστήματος, πρέπει να ζητήσετε προνόμια διαχειριστή. Αυτό γίνεται συνήθως μέσω ενός προφανή αρχείο (για εφαρμογές .NET) ή με την εκτέλεση της εφαρμογής ως διαχειριστή (κάντε δεξί κλικ, "Run as Administrator").

* Αρχείο εκδήλωσης (για .NET): Προσθέστε ένα αρχείο Manifest στο έργο εφαρμογής σας που ζητά το `requestedExecutionLevel 'ως` alimeseadministrator'. Αυτό προτρέπει το UAC όταν ξεκινήσει η εφαρμογή.

`` xml

`` `

4. Βέλτιστες πρακτικές ασφαλείας:

* Αρχή του ελάχιστου προνομίου: Ζητήστε μόνο την απαραίτητη πρόσβαση στο μητρώο. Μην γράφετε σε τοποθεσίες που δεν χρειάζεστε.

* Χειρισμός σφαλμάτων: Πάντα να συμπεριλαμβάνετε τον ισχυρό χειρισμό σφαλμάτων για να πιάσετε το «μη εξουσιοδοτημένο AccessException» (ή το ισοδύναμο στη γλώσσα σας) και να χειριστείτε χαριτωμένα προβλήματα άδειας. Ενημερώστε τον χρήστη εάν το πρόγραμμα δεν διαθέτει επαρκή προνόμια.

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

* Υπογραφή κώδικα: Εξετάστε τον κώδικα υπογράψτε την εφαρμογή σας για να αυξήσετε την εμπιστοσύνη των χρηστών και να μειώσετε την πιθανότητα να το εμποδίσει η UAC.

Συνοπτικά: Η πρόσβαση στο μητρώο των Windows απαιτεί την κατανόηση του UAC και τη χρήση των κατάλληλων κλήσεων API για τη γλώσσα προγραμματισμού σας. Πάντα να χειρίζεστε τα πιθανά σφάλματα άδειας και να ακολουθήσετε ασφαλείς πρακτικές κωδικοποίησης. Για ενέργειες που απαιτούν διοικητικά προνόμια, πρέπει είτε να εκτελέσετε την εφαρμογή ως διαχειριστή είτε να ενσωματώσετε τα κατάλληλα αιτήματα ανύψωσης στο αρχείο εκδήλωσης της αίτησής σας. Θυμηθείτε ότι η ακατάλληλη χειραγώγηση μητρώου μπορεί να αποσταθεροποιήσει το σύστημά σας. προχωρήστε με προσοχή.

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα