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

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 842792
ΣημαντικόΑυτό το άρθρο περιέχει πληροφορίες σχετικά με την τροποποίηση του μητρώου. Πριν να τροποποιήσετε το μητρώο, βεβαιωθείτε ότι έχετε δημιουργήσει αντίγραφα ασφαλείας και ότι γνωρίζετε τον τρόπο επαναφοράς του μητρώου, σε περίπτωση που προκύψει κάποιο θέμα. Για πληροφορίες σχετικά με τον τρόπο δημιουργίας αντιγράφων ασφαλείας, επαναφοράς και επεξεργασίας του μητρώου, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft (Knowledge Base):
256986Περιγραφή του μητρώου των Microsoft Windows
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Συμπτώματα

Μια κλήση προς τονWriteFileσυνάρτηση ενδέχεται να μην επιτύχει. Αυτό το σύμπτωμα προκύπτει, όταν ισχύουν οι ακόλουθες συνθήκες:
  • Χρησιμοποιείτε έναν υπολογιστή-πελάτη που εκτελεί το Microsoft Windows XP Service Pack 1 (SP1).
  • Μπορείτε να χρησιμοποιήσετε τοWriteFileσυνάρτηση για να προσπαθήσετε να κάνετε εγγραφή σε ένα αρχείο που βρίσκεται σε έναν κοινόχρηστο φάκελο δικτύου.
  • Ο κοινόχρηστος φάκελος βρίσκεται σε έναν υπολογιστή-διακομιστή που εκτελεί το Microsoft Windows 2000 ή Microsoft Windows Server 2003.
Επιπλέον, ενδέχεται να εμφανιστεί το ακόλουθο μήνυμα λάθους:
ERROR_ACCESS_DENIED

Αιτία

Αυτό το πρόβλημα παρουσιάζεται, εάν ισχύουν οι ακόλουθες συνθήκες:
  • Όταν χρησιμοποιείται τοCreateFileλειτουργεί για να δημιουργήσετε το αρχείο, να καθορίζεται μόνο τη σταθερά GENERIC_WRITE σε τοdwDesiredAccessΠαράμετρος.
  • Υπογραφή για το διακομιστή Message Block (SMB) είναι ενεργοποιημένη για την επικοινωνία μεταξύ του υπολογιστή-πελάτη και διακομιστή.

Εναλλακτικός τρόπος αντιμετώπισης

Για να αντιμετωπίσετε αυτό το θέμα, χρησιμοποιήστε μία από τις ακόλουθες μεθόδους:
  • Καθορίστε τη σταθερά GENERIC_READ και το GENERIC_WRITE σταθερά στο στοdwDesiredAccessΠαράμετρος.
  • Τροποποιήστε την υπογραφή SMB.

Καθορίστε τη σταθερά GENERIC_READ και η σταθερά GENERIC_WRITE στην παράμετρο dwDesiredAccess

Χρησιμοποιήστε τον ακόλουθο κώδικα για τη δημιουργία του αρχείου.

ΣΗΜΕΙΩΣΗΑντικαταστήστε τα ακόλουθα σύμβολα κράτησης θέσης:
  • Αντικαταστήστε το αρχείοΟΝΟΜΑ_ΔΙΑΚΟΜΙΣΤΗσύμβολο κράτησης θέσης με το όνομα του διακομιστή υπολογιστή που εκτελεί Windows 2000 ή Windows Server 2003.
  • Αντικαταστήστε το αρχείοΌνομα_φακέλουσύμβολο κράτησης θέσης με το όνομα ενός κοινόχρηστου φακέλου δικτύου στον υπολογιστή-διακομιστή.
// Specify the GENERIC_READ constant and the GENERIC_WRITE constant
// in the dwDesiredAccess parameter when you create the file.
hFile = CreateFile("\\\\ServerName\\FolderName\\Test.txt", GENERIC_READ |
    GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

Τροποποιήστε την υπογραφή SMB

ΠΡΟΣΟΧΗΗ εσφαλμένη χρήση του Επεξεργαστή Μητρώου (Registry Editor) ενδέχεται να προκαλέσει σοβαρά σφάλματα, τα οποία ίσως απαιτήσουν την επανεγκατάσταση του λειτουργικού συστήματος. Η Microsoft δεν μπορεί να εγγυηθεί ότι τα θέματα που προκύπτουν από την εσφαλμένη χρήση του Επεξεργαστή Μητρώου (Registry Editor) είναι δυνατό να επιλυθούν. Χρησιμοποιήστε τον Επεξεργαστή Μητρώου (Registry Editor) με δική σας ευθύνη.
Στον υπολογιστή-διακομιστή και του υπολογιστή-πελάτη, ακολουθήστε τα εξής βήματα:
  1. Στον "Επεξεργαστή μητρώου" (Registry Editor), εντοπίστε και κάντε κλικ στο ακόλουθο δευτερεύον κλειδί μητρώου:
    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanServer\Parameters
  2. Στο δεξιό τμήμα του παραθύρου του επεξεργαστή μητρώου, κάντε δεξιό κλικrequiresecuritysignatureΣτοNAMEτο πεδίο και στη συνέχεια κάντε κλικΤροποποίηση (Modify). Για ναΕπεξεργασία τιμής DWORDεμφανίζεται το παράθυρο διαλόγου.
  3. ΣτοΔεδομένα τιμήςπληκτρολογήστε0, και στη συνέχεια κάντε κλικ στο κουμπίOk.
  4. Κλείστε τον Επεξεργαστή Μητρώου (Registry Editor) και, στη συνέχεια, κάντε επανεκκίνηση του υπολογιστή.

Περισσότερες πληροφορίες

Βήματα για την αναπαραγωγή της συμπεριφοράς

  1. Σε έναν υπολογιστή που εκτελεί το Windows XP SP1, χρησιμοποιήστε το Microsoft Visual C++ 6.0 για να δημιουργήσετε ένα απλό έργο εφαρμογής κονσόλας Win32 που ονομάζεται έλεγχος. Από προεπιλογή, δημιουργείται το αρχείο Test.cpp.
  2. Δημιουργήστε ένα αρχείο καθορίζοντας μόνο τη σταθερά GENERIC_WRITE με τοdwDesiredAccessΌταν χρησιμοποιείτε την παράμετρο τουCreateFileFunction.
  3. Χρήση τουWriteFileη λειτουργία για την προσπάθεια εγγραφής στο αρχείο. Για να γίνει αυτό, αντικαταστήστε τον υπάρχοντα κώδικα στο αρχείο Test.cpp με τον παρακάτω κώδικα.

    ΣΗΜΕΙΩΣΗΑντικαταστήστε τα ακόλουθα σύμβολα κράτησης θέσης:
    • Αντικαταστήστε το αρχείοΟΝΟΜΑ_ΔΙΑΚΟΜΙΣΤΗσύμβολο κράτησης θέσης με το όνομα του διακομιστή υπολογιστή που εκτελεί Windows 2000 ή Windows Server 2003.
    • Αντικαταστήστε το αρχείοΌνομα_φακέλουσύμβολο κράτησης θέσης με το όνομα ενός κοινόχρηστου φακέλου δικτύου στον υπολογιστή-διακομιστή.
    :
    #include "stdafx.h"
    #include "windows.h"
    #include "stdio.h"
    #include "conio.h"
    
    void main()
    {
        HANDLE hFile;
        char lpBuffer[99999];
        DWORD lpNumberOfBytesWritten;
    
        // Write data to the buffer that you will
        // you use to write data to the file.
        for (int i = 0; i < 100000; ++i)
            lpBuffer[i] = 'a';
    
        // Specify only the GENERIC_WRITE constant in the
        // dwDesiredAccess parameter when you create the file.
        hFile = CreateFile("\\\\ServerName\\FolderName\\Test.txt",
            GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    
        // Try to write the data in the buffer to the file.
        // If the call to the WriteFile function fails,
        // call the GetLastError function.
        if (!WriteFile(hFile, lpBuffer, 100000, &lpNumberOfBytesWritten, NULL))
    
            // If an ERROR_ACCESS_DENIED error has occurred, inform the user.
            if (GetLastError() == ERROR_ACCESS_DENIED)
            {
                printf("An ERROR_ACCESS_DENIED error has occurred.");
                printf("Press any key to continue.");
                getch();
            }
    
        // Close the handle to the file.
        CloseHandle(hFile);
    }
  4. Δημιουργία και εκτέλεση της εφαρμογής. Εμφανίζεται ένα παράθυρο κονσόλας. Εάν παρουσιαστεί η συμπεριφορά που αναφέρεται στην ενότητα "Συμπτώματα", το παράθυρο της κονσόλας θα περιέχει το ακόλουθο αποτέλεσμα:
    Παρουσιάστηκε σφάλμα ERROR_ACCESS_DENIED.
    Press any key to continue.

Αναφορές

Για περισσότερες πληροφορίες σχετικά με τοCreateFileλειτουργία και τοWriteFileλειτουργία, επισκεφθείτε τις ακόλουθες τοποθεσίες της Microsoft Developer Network (MSDN) στο Web:
CreateFile
http://msdn2.Microsoft.com/en-us/library/aa363858.aspx
WriteFile
http://msdn2.Microsoft.com/en-us/library/aa365747.aspx

Ιδιότητες

Αναγν. άρθρου: 842792 - Τελευταία αναθεώρηση: Τετάρτη, 29 Σεπτεμβρίου 2010 - Αναθεώρηση: 2.0
Λέξεις-κλειδιά: 
kbclient kbprb kberrmsg kbregistry kbkern32dll kbapi kbsmb kbserver kbmt KB842792 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:842792

Αποστολή σχολίων

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com