Come utilizzare la funzionalitÓ di pool speciale per isolare i danni del pool

Traduzione articoli Traduzione articoli
Identificativo articolo: 188831 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

Sommario

Danni pool possono causare molti di pi¨ evasiva problemi con danni di Windows NT. Pool si verifica quando una modalitÓ kernel componente scrive nella memoria all'esterno dell'area del pool allocata. Scrivendo memoria oltre il limite della propria area allocata, Ŕ probabile che un'altra area di memoria allocata, eventualmente appartiene a un altro componente, viene sovrascritto. Il danno pu˛ causare problemi, ad esempio schermate blue completamente non correlati aree di codice. ╚ un componente in modalitÓ kernel lettura oltre l'area allocata anche causare problemi.

Se Ŕ causato dall'attrezzatura originale Driver di produttori (OEM) o problemi di Windows, sono problemi di danneggiamento del pool alcuni dei pi¨ difficili da individuare. In genere, tutte le operazioni che possono essere visualizzate un analisi del dump di arresto anomalo del sistema sono il sintomo del problema effettivo, ad esempio un'area dati sempre danneggiati e che causano problemi in un blocco di codice completamente indipendente. Fino ad oggi, era praticamente impossibile individuare il segmento di codice che danneggia la memoria.

A questo punto pu˛ essere identificato l'origine del danneggiamento del pool con l'istruzione danni pool. Una nuova utilitÓ di gestione della memoria ovvero Ŕ incluso in Windows NT 4.0 Service Pack 4 (SP4), Windows 2000, denominata Pool speciale Windows XP, Windows Server 2003, Windows Vista e Windows Server 2008. L'utilitÓ di Pool speciale identifica il componente in modalitÓ kernel che Ŕ di danneggiare i dati del pool per iscritto all' memoria di fuori dell'area allocata.

Nota. Regolazione della memoria non Ŕ applicabile a Windows Vista e Windows Server 2008. Tuttavia la funzionalitÓ di pool speciale si applica per tali prodotti.

Informazioni

Importante. Questa sezione, metodo o attivitÓ contiene la procedura per modificare il Registro di sistema. Tuttavia, potrebbero verificarsi seri problemi se si modifica il Registro di sistema in modo errato. Pertanto, assicurarsi di seguire attentamente i passaggi. Per maggiore protezione, eseguire il backup del Registro di sistema prima di modificarlo. In questo modo, Ŕ possibile ripristinare il Registro di sistema se si verifica un problema. Per ulteriori informazioni su come eseguire il backup e ripristinare il Registro di sistema, fare clic sul numero dell'articolo riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base:
322756 Come eseguire il backup e ripristinare il Registro di sistema in Windows


L'utilitÓ di Pool speciale Alloca due pagine di memoria virtuale per ogni allocazione di memoria richiesta tramite ExAllocatePoolWithTag che corrisponde ai criteri seguenti:
  • La richiesta di allocazione deve essere di dimensioni minori di allocazione massima che possono essere contenuti in un pool di paging.
  • La richiesta deve corrispondere alla specifica PoolTag nel Registro di sistema.
Per il rilevamento di sovraccarico del pool, la prima pagina viene utilizzata per contenere l'allocazione alla fine della pagina. La seconda pagina Ŕ una pagina di protezione. Per pool sottocarico il rilevamento, la prima pagina Ŕ guard page. ╚ seguito da un pagina che contiene l'allocazione all'inizio della pagina.

Rilevamento di sovraccarico Ŕ probabilmente il pi¨ utilizzato. Per il rilevamento di sovraccarico, il richiesta di allocazione Ŕ posizionato alla fine della prima pagina eseguendo il backup di dimensione richiesta dalla fine della pagina. La dimensione di allocazione viene arrotondata fino a un limite di 8 byte. Una chiave di criterio, le dimensioni e le informazioni sui pool sono scrivere l'intestazione con i primi otto byte della prima pagina. Il modello viene inoltre distribuita in tutta la pagina. PoichÚ l'allocazione Ŕ posizionato in corrispondenza di pi¨ vicino al limite di 8 byte, pu˛ essere fino a sette slop byte che seguono il allocazione. Il modello viene scritti anche i byte di slop dopo il allocazione.

La seconda pagina Ŕ guard page. Guard page Ŕ costituito da una speciale tabella voce PTE (page) che Ŕ contrassegnata con nessun accesso protezione. Contrassegnando questa seconda pagina con la protezione Nessun accesso, qualsiasi codice tentativo di lettura o scrittura oltre la fine della prima pagina immediatamente causa violazione di accesso che restituisce un errore Stop 0x0000001E o di Stop 0x0000000A. In questo modo, un eventuale debug del sistema per trovare l'esatta istruzione che provoca danni di pool.

Come controllo di backup per intercettare i trasgressori scrivere oltre la fine dell'allocazione ma non oltre la fine della pagina, la slop byte alla fine dell'allocazione vengono convalidati durante la richiesta di pool di supporti liberi (ExFreePoolWithTag). Slop byte vengono confrontati con il motivo della intestazione di allocazione per determinare se tutti gli elementi viene sovrascritto nell'area slop byte. Se la verifica non funziona, un errore irreversibile 0x00000001A si verifica.

Questo controllo non troveranno necessariamente il blocco esatto di codice che causa danni del pool. Tuttavia, pu˛ essere utile per identificare il componente che provoca il danno.

Per attivare l'utilitÓ di Pool speciale, aggiungere il chiavi e valori al Registro di sistema seguenti:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management


Nome del valore: PoolTag
Tipo di dati: REG_DWORD
Dati: Maschera di tag pool | Maschera di dimensioni di allocazione | 0
La maschera di tag del pool Ŕ l'ID del tag di pool che contiene la definizione della maschera caratteri di pool in cui si desidera inserire nel pool speciale. Questa maschera deve essere specificato in formato esadecimale in ordine inverso. Questa maschera pu˛ contenere anche "?" per mascherare un singolo carattere o "*" alla maschera da qui fino alla fine del tag. Ad esempio, per monitorare tutti i pool di un tag di pool che inizia con "Nt", specificare "2A744E" (senza virgolette), che rappresenta "* tN".

Il tabella che segue sono elencati altri esempi.
   Pool to monitor   Character representation   Pool tag mask
   ----------------------------------------------------------               
   All pools         "*"                        0x2A
   N??s              "s??N"                     0x733F3F4E
				
Specifica di allocazione dimensione maschera colloca le allocazioni di pool di una dimensione specificata in un pool speciale. Viene inoltre specificato in formato esadecimale. Ad esempio, se sono posizionate in tutte le allocazioni di 32 byte nel pool speciale specificare 0x20.

Quando viene specificato zero (0x0), l'utilitÓ di Pool speciale non Ŕ inizializzato. Inoltre, l'utilitÓ di Pool speciale non inizializzato se il valore del Registro di sistema PoolTag non Ŕ definito nel Registro di sistema.
Nome del valore: PoolTagOverruns
Tipo di dati: REG_DWORD
Dati: 1 | 0
1 indica che i sovraccarichi di allocazione del pool vengono rilevati per il tag specificato. L'allocazione Ŕ situato alla fine della pagina e la protezione pagina segue.

0 indica che vengono rilevate sottocarichi di allocazione del pool per la tag. L'allocazione si trova all'inizio della pagina e guard page precede la pagina contenente l'allocazione.

Esempi comuni di utilizzo per la creazione di queste due chiavi di registro sarebbe come segue:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\ Memory Management


Nome del valore: PoolTag
Tipo di dati: REG_DWORD
Dati: 0x2A

Nome del valore: PoolTagOverruns
Tipo di dati: REG_DWORD
Dati: 1


Nota. Per Windows NT Terminal Server 4.0, Ŕ necessario disattivare KStackPool Quando si utilizza un pool speciale. A tale scopo, aggiungere il seguente valore del Registro di sistema:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management


Nome del valore: EnableKStackPool
Tipo di dati: REG_DWORD
Dati: 0

1 - Pool KStack sempre attivato
2 - Pool KStack attivata per i computer dotati di 256 MB o superiore memoria (impostazione predefinita)
Se non si effettua questa modifica sul terminale Computer server con 256 MB di memoria, potrebbe essere visualizzato "STOP 0x00000078 (PHASE0_EXCEPTION) "messaggi di errore.


Nota. La funzionalitÓ di Pool speciale potrebbe non funzionare in Windows Server 2003 se vi sono voci della tabella pagine speciali insufficienti (PTE). Questo problema si verifica in genere su utente singolo server terminal che contengono pi¨ di 1 GB di RAM e che hanno i valori di ottimizzazione di gestione memoria del computer impostate sui valori predefiniti. Questo problema si verifica nelle versioni a 64 bit di Windows Server 2003.

Un'analisi di file di immagine della memoria del problema potrebbe contenere le seguenti informazioni:
*** 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
Per verificare il problema, la dimensione del Pool speciale che viene allocata dall'analisi. In questo caso, il problema si verifica perchÚ i seguenti valori PTE pool speciale sono uguali:
  • MiSpecialPoolFirstPte
  • MiSpecialPoolLastPte
Questo problema pu˛ verificarsi anche se il valore della voce del Registro di sistema MmSpecialPoolRejected Ŕ di tre o pi¨ grande.

Per aggirare questo problema, configurare il valore della voce del Registro di PagedPoolSize su un valore che Ŕ minore della dimensione del pool di paging Ŕ consentita. Ad esempio, impostare la voce del Registro di sistema di PagedPoolSize su un valore 256 MB. Se si desidera configurare un valore pi¨ grande, Ŕ possibile utilizzare l'utilitÓ Performance Monitor per determinare i requisiti del computer per un grande pool di paging.

╚ possibile utilizzare i seguenti valori per la voce di registro PagedPoolSize:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
Per Windows Server 2003 senza service pack:

Nome del valore: PagedPoolSize
Tipo di dati: REG_DWORD
Dati: 10000000
Base: esadecimale

Per Windows Server 2003 con Service Pack 1 (SP1):

Nome del valore: PagedPoolSize
Tipo di dati: REG_DWORD
Dati: FFFFFFFF
Base: esadecimale

Nota. Dopo aver apportato le modifiche del Registro di sistema descritti in questo articolo, riavviare il computer affinchÚ le modifiche abbiano effetto.

Se Dopo aver attivato la funzionalitÓ di Pool speciale, il computer si blocca (si blocca) e viene visualizzato un messaggio di errore su schermo blu durante l'avvio, riavviare il computer utilizzando l'opzione ultima configurazione sicuramente funzionante. L'attivazione della funzionalitÓ Pool speciale non viene scritta all'ultima nota bene Voce di configurazione nel Registro di sistema solo dopo un accesso riuscito.

ProprietÓ

Identificativo articolo: 188831 - Ultima modifica: venerdý 19 aprile 2013 - Revisione: 0.1
Le informazioni in questo articolo si applicano a:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows XP Professional
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003 Service Pack 2
  • Windows Vista Home Premium
  • Windows Vista Enterprise
  • Windows Vista Ultimate
  • Windows Vista Service Pack 2
  • Windows Server 2008 Standard
  • Windows Server 2008 Enterprise
  • Windows Server 2008 Datacenter
  • Windows Server 2008 Service Pack 2
  • Windows 7 Home Premium
  • Windows 7 Enterprise
  • Windows 7 Professional
  • Windows 7 Ultimate
  • Windows 7 Service Pack 1
  • Windows Server 2008 R2 Standard
  • Windows Server 2008 R2 Enterprise
  • Windows Server 2008 R2 Datacenter
  • Windows Server 2008 R2 Service Pack 1
Chiavi:á
kbenv kbhowto kbqfe kbmt KB188831 KbMtit
Traduzione automatica articoli
IMPORTANTE: il presente articolo Ŕ stato tradotto tramite un software di traduzione automatica di Microsoft ed eventualmente revisionato dalla community Microsoft tramite la tecnologia CTF (Community Translation Framework) o da un traduttore professionista. Microsoft offre articoli tradotti manualmente e altri tradotti automaticamente e rivisti dalla community con l?obiettivo di consentire all'utente di accedere a tutti gli articoli della Knowledge Base nella propria lingua. Tuttavia, un articolo tradotto automaticamente, anche se rivisto dalla community, non sempre Ŕ perfetto. Potrebbe contenere errori di vocabolario, di sintassi o di grammatica. Microsoft declina ogni responsabilitÓ per imprecisioni, errori o danni causati da una traduzione sbagliata o dal relativo utilizzo da parte dei clienti. Microsoft aggiorna frequentemente il software e gli strumenti di traduzione automatica per continuare a migliorare la qualitÓ della traduzione.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 188831
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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