Cómo utilizar la característica bloque especial para aislar daños de bloques

Seleccione idioma Seleccione idioma
Id. de artículo: 188831 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Resumen

Pueden causar daños de bloques muchas de las tareas problemas evasivas con daños de bloques de Windows NT. se produce cuando un modo de núcleo componente que se escribe en la memoria fuera del área de grupo asignado. Mediante la escritura en memoria más allá del límite de su área asignada, es probable que otro área de memoria asignada, posiblemente propiedad de otro componente, se sobrescribe. Este daño puede causar problemas tales como pantallas azules en totalmente no relacionados áreas del código. Un componente en modo de núcleo de lectura más allá de su área asignada puede también provocar problemas.

Si está causado por el equipo Original Controladores de fabricantes (OEM) o problemas en Windows, problemas de daños de piscina son Algunos de los más difíciles de identificar. Normalmente, todo lo que puede verse en un análisis de volcado de bloqueo es el síntoma del problema real, como un área de datos cada vez está dañados y que causan problemas en un bloque nada de código. Hasta ahora, era casi imposible encontrar el segmento de código pueda dañar la memoria.

Ahora se puede identificar el origen de los daños de bloques en la instrucción que cause los daños de la piscina. Una nueva utilidad de administración de memoria es decir un bloque especial con nombre se incluye con Windows NT 4.0 Service Pack 4 (SP4), Windows 2000, Windows XP, Windows Server 2003, Windows Vista y Windows Server 2008. La utilidad de un bloque especial identifica el componente de modo de núcleo que está dañando datos del grupo escribiendo a memoria fuera de su área asignada.

Nota Optimización de la memoria no se aplica a Windows Vista y Windows Server 2008. Sin embargo, la característica bloque especial es aplicable para estos productos.

Más información

Importante: Esta sección, el método o la tarea contiene pasos que le indican cómo modificar el registro. Sin embargo, pueden producirse problemas graves si modifica incorrectamente el registro. Por lo tanto, asegúrese de que sigue estos pasos cuidadosamente. Para una mayor protección, copia de seguridad del registro antes de modificarlo. Luego puede restaurar el registro si surge algún problema. Para obtener más información acerca de cómo hacer copia de seguridad y restaurar el registro, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
322756 Cómo hacer copia de seguridad y restaurar el registro en Windows


La utilidad de grupo especial asigna dos páginas de memoria virtual para cada asignación del bloque que se solicita a través de ExAllocatePoolWithTag que cumple los criterios siguientes:
  • La solicitud de asignación debe ser de un tamaño menor que el asignación máxima que pueden caber en una página de grupo.
  • La solicitud debe coincidir con la especificación de PoolTag en el registro.
Para la detección de saturación de grupo, la primera página se utiliza para contener la asignación al final de la página. La segunda página es una página de guarda. Para detección de agotamiento de grupo, la primera página es la página de guarda. Es seguido por un página que contiene la asignación al principio de la página.

Detección de la saturación es probablemente el más usado. Para la detección de saturación, el solicitado la asignación se sitúa al final de la primera página haciendo una copia de seguridad de la tamaño de la solicitud desde el final de la página. El tamaño de asignación se redondea a un límite de 8 bytes. Una clave de patrón, el tamaño y la información de la etiqueta de grupo son escribe en la cabecera de los ocho primeros bytes de la primera página. El patrón También se propaga a lo largo de la página. Dado que la asignación se sitúa en el más próximo al límite de 8 bytes, puede haber como máximo siete bytes de decantación que siguen el asignación. El modelo también se escribe en los bytes de decantación siguiendo las asignación.

La segunda página es la página de guarda. La página de guarda se compone de una entrada de tabla de página (PTE) que está marcada con sin acceso protección. Al marcar esta segunda página con protección sin acceso, cualquier código intentar leer o escribir hace más allá del final de la primera página inmediatamente una infracción de acceso que tiene como resultado un Stop 0x0000000A o un error Stop 0x0000001E. Esto permite que alguien que depure el sistema para buscar la instrucción exacta que causa daños de bloques.

Como una comprobación de copia de seguridad para detectar los infractores que escribir más allá del final de la asignación, pero no después del final de la página, la decantación bytes situados al final de la asignación se validan durante la solicitud del grupo de medios libres (ExFreePoolWithTag). Los bytes de decantación se comparan con el modelo en el en el área de byte de decantación se sobrescriben los encabezados de asignación para determinar si cualquier cosa. Si la comprobación no funciona, un error de detención 0x00000001A se produce.

Esta comprobación no encuentra necesariamente exactas de bloque de código que provoque daños de bloques. Sin embargo, puede ayudar a identificar el componente que hace que el daño.

Para habilitar la utilidad de un bloque especial, agregue el las claves y valores al registro siguientes:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management


Nombre de valor: PoolTag
Tipo de datos: REG_DWORD
Datos: Máscara de etiqueta de grupo | Máscara de tamaño de asignación | 0
La máscara de la etiqueta de grupo es el identificador de etiqueta de grupo que contiene la máscara caracteres de la agrupación en la que desea colocar en el grupo especial. Esta máscara debe especificarse en formato hexadecimal en orden inverso. Esta máscara puede contener también "?" para un solo carácter de máscara o "*" a la máscara a partir de aquí al final de la etiqueta. Por ejemplo, para supervisar todos los grupos con una etiqueta de grupo que comienza con "Nt", especificar "2A744E" (sin las comillas), que representa "* tN".

El la tabla siguiente enumera más ejemplos.
   Pool to monitor   Character representation   Pool tag mask
   ----------------------------------------------------------               
   All pools         "*"                        0x2A
   N??s              "s??N"                     0x733F3F4E
				
Especificación de la máscara de tamaño de asignación coloca todas las asignaciones de bloques de un tamaño especificado en el bloque especial. Esto también se especifica en formato hexadecimal. Por ejemplo, si se colocan todas las asignaciones de 32 bytes en un bloque especial Especifique 0 x 20.

Cuando se especifica cero (0 x 0), la utilidad de un bloque especial no se ha inicializado. Además, la utilidad de un bloque especial no se inicializa si el valor del registro PoolTag no está definido en el registro.
Nombre de valor: PoolTagOverruns
Tipo de datos: REG_DWORD
Datos: 1 | 0
1 indica que se detectan saturaciones de asignación de grupo para el etiqueta especificada. La asignación se encuentra al final de la página y la protección sigue en la página.

0 indica que se detectan agotamientos de asignación de grupo para el etiqueta. La asignación se encuentra al principio de la página y la página de guarda precede a la página que contiene la asignación.

Ejemplos de uso común para crear estas dos claves del registro sería como sigue:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\ Memory Management


Nombre de valor: PoolTag
Tipo de datos: REG_DWORD
Datos: 0x2A

Nombre de valor: PoolTagOverruns
Tipo de datos: REG_DWORD
Datos: 1


Nota Para Windows NT Terminal Server 4.0, debe deshabilitar KStackPool Cuando utilice un bloque especial. Para ello, agregue el siguiente valor del registro:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management


Nombre de valor: EnableKStackPool
Tipo de datos: REG_DWORD
Datos: 0

1 - Grupo de KStack siempre habilitada
2 - Grupo de KStack habilitado para equipos que tienen 256 MB o más memoria (valor predeterminado)
Si no realiza este cambio en Terminal Equipos de servidor que tienen 256 MB o más memoria, puede aparecer "STOP 0x00000078 (PHASE0_EXCEPTION) "mensajes de error.


Nota La característica bloque especial no funcionen en Windows Server 2003 si hay insuficiente especial tabla entradas de páginas (PTE). Este problema suele producirse en servidores de terminal de usuario único que contienen más de 1 GB de RAM y que tienen los valores de ajuste de administración de memoria del equipo que se establecen en valores predeterminados. Este problema no ocurre en las versiones de 64 bits de Windows Server 2003.

Un análisis de archivo de volcado de memoria del problema puede contener la siguiente información:
*** 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
Puede comprobar el problema por el tamaño de bloque de memoria especial que se asigna a partir del análisis. En este caso, el problema se produce porque los siguientes valores PTE de bloque especial son iguales:
  • MiSpecialPoolFirstPte
  • MiSpecialPoolLastPte
Este problema puede producirse también si el valor de la entrada del registro MmSpecialPoolRejected es tres o más grande.

Para evitar este problema, configure el valor de la entrada del registro de PagedPoolSize en un valor que es menor que el tamaño del bloque paginado que se permite. Por ejemplo, establezca la entrada del registro de PagedPoolSize en un valor de 256 MB. Si desea configurar un valor mayor, utilice la utilidad Monitor de rendimiento para determinar los requisitos del equipo para un tamaño de bloque paginado mayor.

Puede utilizar los siguientes valores de entrada de registro de PagedPoolSize:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
Para Windows Server 2003 sin service pack:

Nombre de valor: PagedPoolSize
Tipo de datos: REG_DWORD
Datos: 10000000
Base: Hexadecimal

Para Windows Server 2003 con Service Pack 1 (SP1) instalado:

Nombre de valor: PagedPoolSize
Tipo de datos: REG_DWORD
Datos: FFFFFFFF
Base: Hexadecimal

Nota Después de realizar cualquiera de los cambios del registro que se describen en este el artículo y, a continuación, reiniciar el equipo para que los cambios surtan efecto.

If Después de habilitar la característica bloque especial, el equipo deja de responder (se bloquea), y recibe un mensaje de error en una pantalla azul durante el inicio, reinicie el equipo mediante la opción última configuración válida conocida. Habilitar la característica bloque especial no se escribe a la última buena conocida Entrada de configuración en el registro hasta después de iniciar sesión correctamente.

Propiedades

Id. de artículo: 188831 - Última revisión: viernes, 19 de abril de 2013 - Versión: 0.1
La información de este artículo se refiere 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
Palabras clave: 
kbenv kbhowto kbqfe kbmt KB188831 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 188831

Enviar comentarios

 

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