Πώς μπορείτε να χρησιμοποιήσετε τη δυνατότητα "ειδικός χώρος συγκέντρωσης" για να απομονώσετε την καταστροφή του χώρου συγκέντρωσης

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 188831 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Περίληψη

Καταστροφή του χώρου συγκέντρωσης ενδέχεται να προκαλέσει πολλές από τις πιο evasive ζητήματα με τα Windows NT. Pool ζημιά προκαλείται όταν γράφει ένα στοιχείο πυρήνα μνήμης εκτός της περιοχής εκχωρημένο χώρο συγκέντρωσης. Γράφοντας σε μνήμη, πέρα από το όριο της περιοχής που έχει εκχωρηθεί, είναι πιθανό ότι μια άλλη περιοχή του εκχωρημένη μνήμη, πιθανώς ανήκει σε ένα άλλο στοιχείο έχει αντικατασταθεί. Αυτή η ζημιά μπορεί να προκαλέσει προβλήματα όπως μπλε οθόνες σε εντελώς μη σχετιζόμενες περιοχές του κώδικα. Ένα στοιχείο πυρήνα ανάγνωση πέρα από την αντιστοιχισμένη περιοχή μπορούν επίσης να προκαλέσουν προβλήματα.

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

Η προέλευση του χώρου συγκέντρωσης ζημιά τώρα μπορούν να αναγνωριστούν με την οδηγία που προκαλεί την καταστροφή του χώρου συγκέντρωσης. Ένα νέο πρόγραμμα διαχείρισης μνήμης που ονομάζεται ειδικής περιοχής συμπεριλαμβάνεται με τα Windows NT 4.0 Service Pack 4 (SP4), τα Windows 2000, Windows XP, Windows Server 2003, τα Windows Vista και Windows Server 2008. Το βοηθητικό πρόγραμμα ειδικής περιοχής προσδιορίζει το στοιχείο πυρήνα που επιζήμια χώρου συγκέντρωσης δεδομένων από εγγραφή σε μνήμη έξω από τον εκχωρημένο χώρο.

ΣΗΜΕΙΩΣΗΡύθμιση μνήμης δεν ισχύει για τα Windows Vista και Windows Server 2008. Ωστόσο τη δυνατότητα "ειδικός χώρος συγκέντρωσης" ισχύουν για αυτά τα προϊόντα.

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

ΣημαντικόΑυτή ενότητα, μέθοδο ή εργασία περιέχει βήματα που θα σας πληροφορήσει πώς να τροποποιήσετε το μητρώο. Ωστόσο, ενδέχεται να προκύψουν σοβαρά προβλήματα εάν δεν τροποποιήσετε σωστά το μητρώο. Κατά συνέπεια, βεβαιωθείτε ότι ακολουθείτε προσεκτικά τα εξής βήματα. Για επιπλέον προστασία, δημιουργήστε αντίγραφα ασφαλείας του μητρώου προτού το τροποποιήσετε. Με αυτόν τον τρόπο, μπορείτε να επαναφέρετε το μητρώο εάν προκύψει πρόβλημα. Για περισσότερες πληροφορίες σχετικά με τον τρόπο δημιουργίας αντιγράφων ασφαλείας και επαναφοράς του μητρώου, κάντε κλικ στον αριθμό του άρθρου παρακάτω για να προβάλετε το άρθρο της Γνωσιακής βάσης της Microsoft:
322756Τρόπος δημιουργίας αντιγράφων ασφαλείας και επαναφοράς του μητρώου στα Windows


Το βοηθητικό πρόγραμμα ειδικός χώρος συγκέντρωσης εκχωρεί δύο σελίδες εικονικής μνήμης για κάθε εκχώρηση χώρου συγκέντρωσης που ζητούνται μέσω ExAllocatePoolWithTag που ταιριάζει με τα εξής κριτήρια:
  • Η αίτηση ανάθεσης πρέπει να είναι για ένα μέγεθος μικρότερο από το μέγιστο εκχώρησης που χωρούν σε μια σελίδα του χώρου συγκέντρωσης.
  • Η αίτηση πρέπει να ταιριάζουν με τις προδιαγραφές PoolTag στο μητρώο.
Για τον εντοπισμό του χώρου συγκέντρωσης υπέρβασης, η πρώτη σελίδα χρησιμοποιείται για να περιλαμβάνουν την εκχώρηση στο τέλος της σελίδας. Η δεύτερη σελίδα είναι σελίδα φύλαξης. Για τον εντοπισμό του χώρου συγκέντρωσης κατά της υπολειτουργίας του, στην πρώτη σελίδα είναι σελίδα φύλαξης. Ακολουθείται από μια σελίδα που περιέχει την εκχώρηση στην αρχή της σελίδας.

Υπέρβαση ανίχνευσης είναι πιθανώς το πιο συχνά. Για τον εντοπισμό της υπέρβασης, της εκχώρησης που ζητήθηκε έχει τοποθετηθεί στο τέλος της πρώτης σελίδας από αντίγραφα ασφαλείας στο μέγεθος της αίτησης από το τέλος της σελίδας. Το μέγεθος εκχώρησης στρογγυλοποιείται προς ένα όριο μεγέθους 8-byte. Ένα κλειδί μοτίβο, το μέγεθος και τις πληροφορίες ετικέτας χώρου συγκέντρωσης εγγράφονται στην κεφαλίδα στην πρώτη οκτώ byte της πρώτης σελίδας. Το μοτίβο μεταδίδεται επίσης σε ολόκληρη τη σελίδα. Επειδή η ανάθεση είναι τοποθετημένα στη στο πλησιέστερο όριο μεγέθους 8-byte, ενδέχεται να υπάρχει έως επτά slop byte που ακολουθεί την κατανομή. Το μοτίβο καταγράφεται επίσης τα byte slop ακολουθώντας την εκχώρηση.

Η δεύτερη σελίδα είναι σελίδα φύλαξης. Η σελίδα φύλαξης αποτελείται από μια καταχώρηση πίνακα ειδικών σελίδων (PTE) που έχει επισημανθεί με προστασία χωρίς πρόσβαση. Με σήμανση αυτής της δεύτερης σελίδας με προστασία χωρίς πρόσβαση, οποιονδήποτε κώδικα επιχειρεί να κάνει ανάγνωση ή εγγραφή αμέσως πέρα από το τέλος της πρώτης σελίδας προκαλεί την παραβίαση πρόσβασης που έχει ως αποτέλεσμα μια διακοπή 0x0000000A ή Stop 0x0000001E σφάλμα. Αυτό επιτρέπει σε κάποιον εντοπισμού σφαλμάτων του συστήματος για να βρείτε την ακριβή οδηγία που προκαλεί καταστροφή του χώρου συγκέντρωσης.

As a backup check to catch violators that write beyond the end of the allocation but not beyond the end of the page, the slop bytes at the end of the allocation are validated during the free pool request (ExFreePoolWithTag). The slop bytes are compared to the pattern in the allocation header to determine whether anything is overwritten in the slop byte area. If the verification check does not work, a Stop 0x00000001A error occurs.

This check does not necessarily find the exact block of code that causes pool damage. However, it may help identify the component that causes the damage.

To enable the Special Pool utility, add the following keys and values to the registry:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management


Όνομα τιμής: PoolTag
Τύπος δεδομένων: REG_DWORD
DATA: Pool tag mask | Allocation size mask | 0
The pool tag mask is the pool tag ID that contains masking characters of the pool in which you want to put in the special pool. This mask must be specified in hexadecimal in reverse order. This mask may also contain "?" to mask a single character or "*" to mask from here to the end of the tag. For example, to monitor all pools with a pool tag that begins with "Nt", specify "2A744E" (without the quotation marks), which represents "*tN".

The following table lists more examples.
   Pool to monitor   Character representation   Pool tag mask
   ----------------------------------------------------------               
   All pools         "*"                        0x2A
   N??s              "s??N"                     0x733F3F4E
				
Allocation size mask specification places all pool allocations of a specified size into the special pool. This is also specified in hexadecimal. For example, if all allocations of 32 bytes are positioned in the special pool, specify 0x20.

When zero (0x0) is specified, the Special Pool utility is not initialized. In addition, the Special Pool utility is not initialized if the PoolTag registry value is not defined in the registry.
Όνομα τιμής: PoolTagOverruns
Τύπος δεδομένων: REG_DWORD
DATA: 1 | 0
1 indicates that pool allocation overruns are detected for the tag specified. The allocation is located at the end of the page and the guard page follows.

0 indicates that pool allocation underruns are detected for the tag. The allocation is located at the beginning of the page, and the guard page comes before the page that contains the allocation.

Common use examples to create these two registry keys would be as follows:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\ Memory Management


Όνομα τιμής: PoolTag
Τύπος δεδομένων: REG_DWORD
DATA: 0x2A

Όνομα τιμής: PoolTagOverruns
Τύπος δεδομένων: REG_DWORD
DATA: 1


ΣΗΜΕΙΩΣΗFor Windows NT Terminal Server 4.0, you must disable KStackPool when you use special pool. To do this, add the following registry value:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management


Όνομα τιμής: EnableKStackPool
Τύπος δεδομένων: REG_DWORD
DATA: 0

1- KStack pool always enabled
2- KStack pool enabled for computers that have 256 MB or more memory (default)
If you do not make this change on Terminal Server computers that have 256 MB or more memory, you may receive "STOP 0x00000078 (PHASE0_EXCEPTION)" error messages.


ΣΗΜΕΙΩΣΗThe Special Pool feature may not work in Windows Server 2003 if there are insufficient special page table entries (PTEs). This issue typically occurs on single-user terminal servers that contain more than 1 GB of RAM and that have the memory management tuning values of the computer set to default values. This issue does not occur in 64-bit versions of Windows Server 2003.

A memory dump file analysis of the issue may contain the following information:
*** Virtual Memory Usage *** 
Physical Memory: 1015660 ( 4062640 Kb) 
Page File: \??\C:\Pagefile1\pagefile.sys 
Current: 4193280Kb Free Space: 4180856Kb 
Minimum: 4193280Kb Maximum: 4193280Kb 
Available Pages: 552680 ( 2210720 Kb) 
ResAvail Pages: 932179 ( 3728716 Kb) 
Locked IO Pages: 347 ( 1388 Kb) 
Free System PTEs: 187166 ( 748664 Kb) 
Free NP PTEs: 32765 ( 131060 Kb) 
Free Special NP: 117228 ( 468912 Kb) 
Modified Pages: 106 ( 424 Kb) 
Modified PF Pages: 98 ( 392 Kb) 
NonPagedPool Usage: 6599 ( 26396 Kb) 
NonPagedPool Max: 65536 ( 262144 Kb) 
PagedPool 0 Usage: 10697 ( 42788 Kb) 
PagedPool 1 Usage: 1240 ( 4960 Kb) 
PagedPool 2 Usage: 1239 ( 4956 Kb) 
PagedPool 3 Usage: 1265 ( 5060 Kb) 
PagedPool 4 Usage: 1231 ( 4924 Kb) 
PagedPool Usage: 15672 ( 62688 Kb) 
PagedPool Maximum: 90112 ( 360448 Kb) 
Shared Commit: 3866 ( 15464 Kb) 
Special Pool: 511 ( 2044 Kb) <-- very small
Shared Process: 5205 ( 20820 Kb) 
PagedPool Commit: 15672 ( 62688 Kb) 
Driver Commit: 2091 ( 8364 Kb) 
Committed pages: 439832 ( 1759328 Kb) 
Commit limit: 2023823 ( 8095292 Kb)

0: kd> dd nt!MmSpecialPoolRejected l8 
8057afe0 00000000 00000000 00b2e59a 00000000 <-- A DWORD value of 3 causes special pool PTE's shortage.
8057aff0 00000000 00000000 00000000 00000000

8057afd8 nt!MiSpecialPoolFirstPte = 0xc022af78
8057afd4 nt!MiSpecialPoolLastPte = 0xc022af78
You can verify the issue by the size of the Special Pool that is allocated from the analysis. In this case, the issue occurs because the following special pool PTE values are equal:
  • MiSpecialPoolFirstPte
  • MiSpecialPoolLastPte
This issue may also occur if the value of the MmSpecialPoolRejected registry entry is three or larger.

To work around this issue, configure the value of the PagedPoolSize registry entry to a value that is smaller than the paged pool size that is permitted. For example, set the PagedPoolSize registry entry to a value 256 MB. If you want to configure a larger value, use the Performance Monitor utility to determine the computer's requirement for a larger paged pool size.

You can use the following values for PagedPoolSize registry entry:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
For Windows Server 2003 without a service pack:

Όνομα τιμής: PagedPoolSize
Τύπος δεδομένων: REG_DWORD
DATA: 10000000
Base: Hexadecimal

For Windows Server 2003 with Service Pack 1 (SP1) installed:

Όνομα τιμής: PagedPoolSize
Τύπος δεδομένων: REG_DWORD
DATA: FFFFFFFF
Base: Hexadecimal

ΣΗΜΕΙΩΣΗΑφού κάνετε οποιαδήποτε από τις αλλαγές μητρώου που περιγράφονται σε αυτό το άρθρο, κάντε επανεκκίνηση του υπολογιστή προκειμένου να τεθούν σε ισχύ οι αλλαγές.

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

Ιδιότητες

Αναγν. άρθρου: 188831 - Τελευταία αναθεώρηση: Σάββατο, 18 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows XP Professional
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Server
  • Windows Vista Enterprise
  • Windows Vista Home Premium
  • Windows Vista Ultimate
  • Windows Server 2008 Standard
  • Windows Server 2008 Enterprise
  • Windows Server 2008 Datacenter
Λέξεις-κλειδιά: 
kbenv kbhowto kbqfe kbmt KB188831 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:188831

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

 

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