Πώς ασφαλείας .NET πραγματικά εργασία;

ψήφοι
1

Μόλις είδα αυτήν την ερώτηση:

Η κατανόηση των παραμέτρων .NET για «SecurityAction» για τα δικαιώματα

Και έχω μια ερώτηση. Με τον παρακάτω κωδικό:

private void button1_Click(object sender, EventArgs e)
{
    Layer1();
    MessageBox.Show(OK);
}

private void Layer1()
{
    try
    {
        Layer2();
    }
    catch (SecurityException)
    {
        MessageBox.Show(Caught);
    }
    Layer2b();
}

private void Layer2()
{
    new System.Security.Permissions.FileIOPermission(PermissionState.Unrestricted).Deny();
    GC.Collect();
    Layer3();
}

private void Layer2b()
{
    Layer3();
}

[FileIOPermission(SecurityAction.LinkDemand, Write=@C:\temp)]
private void Layer3()
{
    using (FileStream stream = new FileStream(@C:\temp\test.txt, FileMode.Create))
    {
    }
}

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

Αυτό που δίνει; Τι είμαι εγώ που λείπει; Θα παραδεχτώ ότι είναι ένα σύνολο αρχάριος, όταν πρόκειται για το σύστημα ασφαλείας / άδεια στη ΝΕΤ οπότε συγχωρέστε με αν αυτή η ερώτηση είναι πολύ βασικό.

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

Δημοσιεύθηκε 09/12/2008 στις 23:25
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
3

Κλήση .Deny () σε CodeAccessPermission θα προκαλέσει το χρόνο εκτέλεσης .NET Ασφάλεια για να ορίσετε τη σημαία αρνηθεί στο αντικείμενο της ασφάλειας για το τρέχον πλαίσιο της στοίβας για την εν λόγω άδεια. Έτσι, ακόμα κι αν σας καλέσει GC.Collect () μετά την κλήση .Deny (), δεν έχει τόση σημασία, η άδεια θα παραμείνει σε ισχύ. Το αντικείμενο άδεια είναι απλά μια αναπαράσταση της κατάστασης του τμήματος της εκτέλεσης ασφαλείας .NET σε ένα χρονικό σημείο (ένα πλαίσιο στοίβας).

Απλά χρησιμοποιήστε ΝΕΤ ανακλαστήρα για να μάθετε περισσότερα.

Απαντήθηκε 09/12/2008 στις 23:39
πηγή χρήστη

ψήφοι
0

Κατά την πρώτη ματιά, θα ήθελα να μαντέψει ότι το αντικείμενο άδεια εξακολουθεί να είναι το πεδίο εφαρμογής, όπως ορίζεται στο εσωτερικό της μεθόδου, πέφτει έξω από το πεδίο εφαρμογής μετά την ολοκλήρωση της μεθόδου Layer2, επιτρέποντας έτσι την τελευταία γραμμή της αίτησής σας για να λειτουργήσει.

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

Απαντήθηκε 09/12/2008 στις 23:36
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more