June 2007 - Artículos

Apertura rápida de una ventana de símbolo del sistema desde el administrador de tareas (I)

Los administradores de tareas de Windows XP y Windows Server 2003 incorporan una curiosa novedad con respecto a versiones anteriores que no he visto reflejada en ninguna documentación. Este nuevo comportamiento también ha sido incluido en versiones posteriores, como Windows Vista.

Nota: la opción Nueva tarea (Ejecutar...) del administrador de tareas no estará disponible si la opción Ejecutar del menú Inicio se ha deshabilitado mediante directivas de usuario o de grupo.

El procedimiento habitual para abrir una ventana de símbolo del sistema desde el administrador de tareas consiste en ir al menú Archivo, elegir la opción Nueva tarea (Ejecutar...), escribir CMD en el cuadro de texto de la ventana Ejecutar y pulsar el botón Aceptar. Sin embargo existe un atajo. Si vamos al menú Archivo y dejamos pulsada la tecla Ctrl mientras hacemos clic sobre la opción Nueva tarea (Ejecutar...), aparecerá una ventana de símbolo de sistema en lugar del cuadro de diálogo Ejecutar. También funciona con el teclado: abrimos el menú Archivo (File en inglés) mediante Alt+A (Alt+F en inglés o Alt más la tecla de acceso rápido correspondiente en otros idiomas), seleccionamos la opción Nueva tarea (Ejecutar...) con las flechas si es necesario, y finalmente pulsamos la combinación Ctrl+Enter.

Actualización (24/6/2007): el botón Tarea nueva de la pestaña Aplicaciones equivale a la opción Nueva tarea (Ejecutar...) del menú Archivo. Si se hace clic sobre él con la tecla Ctrl pulsada, también se abre la ventana de símbolo del sistema en lugar del cuadro de diálogo Ejecutar. Podemos conseguir lo mismo con el teclado: si no nos encontramos en la pestaña Aplicaciones, pulsamos repetidamente Ctrl+Tab (pestaña siguiente) o Ctrl+Shift+Tab (pestaña anterior) para activarla; después pulsamos Tab o Shift+Tab repetidamente hasta situarnos sobre el botón Tarea nueva y finalmente pulsamos Ctrl+Espacio, no Ctrl+Enter como podríamos haber pensado en un principio.

Mensaje de error al hibernar: No hay recursos de sistema suficientes para completar la llamada a la API

Si un equipo basado en Windows XP Service Pack 2 (32 bits) dispone al menos de un gigabyte (1 GB) de memoria RAM física, es posible que la hibernación falle ocasionalmente con el siguiente mensaje de error: No hay recursos de sistema suficientes para completar la llamada a la API.

Se trata de un problema conocido por Microsoft y documentado en su Knowledge Base:
A veces el equipo no se pone en hibernación y recibe el mensaje "No hay recursos de sistema suficientes para completar la llamada a la API" en Windows XP con el SP2, en Windows XP Tablet PC Edition 2005 o en Windows XP Media Center Edition 2005 (KB909095)

Inicialmente había que ponerse en contacto con los servicios de soporte técnico de producto (PSS) para obtener la actualización a la que se refiere el artículo. Microsoft decidió publicarla finalmente en agosto de 2006 a través del centro de descargas, aunque no la consideró importante para distribuirla mediante mecanismos de actualización automática tales como Windows Update o Windows Server Update Services.

Actualización para Windows XP (KB909095)
Fecha de publicación: 15 de agosto de 2006.
Versión de los archivos: 5.1.2600.2774.
La descarga requiere validación de Windows original.

Posteriormente han ido apareciendo otras actualizaciones relacionadas con el núcleo de Windows XP. A saber:

Por tanto, un requisito para asegurar que el problema expuesto al principio esté resuelto es que la versión del archivo Ntoskrnl.exe sea igual o superior a 5.1.2600.2774. Esta comprobación no es suficiente. La solución sólo se incluye en la rama QFE (Quick Fix Engineering, ingeniería de corrección rápida) de las actualizaciones del sistema operativo.

Es posible forzar la instalación de una actualización en modo QFE ejecutando el paquete de instalación desde la línea de parámetros con el parámetro /B:

WindowsXP-KB931784-x86-LLL.exe /B:SP2QFE

Donde LLL es el código de idioma: ENU para inglés, ESN para español, etc.

De esta manera, las propiedades de versión de Ntoskrnl.exe serán similares a estas:

version ntoskrnl

En el elemento Versión del archivo, la partícula xpsp_sp2_qfe nos indica que Ntoskrnl.exe incluye todos los hotfixes posteriores a Service Pack 2 de Windows XP hasta la versión 5.1.2600.3093 del archivo. En archivos más antiguos, la partícula se reduce a xpsp, con significado equivalente. Por otro lado, xpsp_sp2_gdr indicaría que el archivo sólo contiene las actualizaciones de distribución general (General Distribution Releases), es decir, actualizaciones de seguridad y otras correcciones importantes relacionadas con estabilidad, fiabilidad, rendimiento o funcionalidad. Por último, xpsp_sp2_rtm representa a archivos originales del Service Pack 2, sin actualizaciones ni hotfixes posteriores.

También se puede migrar un archivo GDR a QFE instalando una actualización QFE que lo contenga. Windows y el programa de instalación de la actualización se coordinarán para instalar las versiones adecuadas de los archivos. La carpeta \Windows\$hf_mig$ es fundamental en este proceso. Por ejemplo, si ya se instaló la actualización de seguridad KB931784, basta con instalar KB909095 o KB924441 para migrar los archivos del kernel a versiones QFE. El programa de instalación mantendrá la consistencia instalando los archivos que dejó la actualización KB931784 en la carpeta \Windows\$hf_mig$\KB931784\SP2QFE en lugar de los incluidos en KB909095 o KB924441.

¿Qué es la hibernación?

La hibernación es un mecanismo de ahorro de energía que consiste en almacenar en disco todo el estado del sistema, incluido el contenido de la memoria física, y seguidamente apagar el equipo. Al volver a arrancar el PC, el cargador del sistema operativo determina que existe información de hibernación y procede a restaurar el estado del sistema. Generalmente la máquina está operativa en menos tiempo del que duraría un arranque desde cero y conservando las aplicaciones que estuvieran activas.

¿Cómo se activa y desactiva?

En Windows, la hibernación se controla mediante una casilla de verificación en la pestaña Hibernación de las Opciones de energía del Panel de control.

hibernacion

No se permite la hibernación en sistemas que disponen de más de 4 gigabytes de memoria física, como expone el siguiente artículo de la Knowledge Base de Microsoft:
You cannot put a computer that has more than 4 GB of memory into hibernation in Windows XP and in Windows Server 2003 (KB888575)

Cuando se habilita la hibernación, Windows crea un archivo denominado Hiberfil.sys en el directorio raíz de la unidad de sistema (volume boot o volumen de arranque, según Microsoft). Este archivo tiene un tamaño equivalente al de la RAM física instalada y no se puede mover a otra ubicación. El espacio ocupado se puede recuperar desactivando la hibernación.

¿En qué medida se puede usar en lugar del apagado normal?

Es tentador acostumbrarse a mandar el sistema a hibernar en lugar de apagarlo completamente. Sin embargo, es recomendable efectuar un apagado o reinicio completo para empezar con un arranque limpio después de varios ciclos de hibernación. Aplicaciones y drivers pueden haber estado ocupando recursos valiosos a lo largo del tiempo, degradando paulatinamente el desempeño del sistema.

Ya lo he habilitado. ¿Cómo le ordeno a mi equipo que hiberne?

Nota: la interfaz gráfica de Windows Vista es diferente a lo que se muestra aquí. Aún no dispongo de capturas de pantalla.

Inicio con pantalla de bienvenida: Windows XP

Menú Inicio, Apagar equipo. Si el sistema admite la opción Suspender, sólo podremos ver las opciones Suspender, Apagar y Reiniciar, como se ve en el siguiente gráfico:

apagar-bienvenida

En este caso, al dejar pulsada la tecla de mayúsculas, la opción Hibernar sustituirá a Suspender. Esto también ocurre cuando la hibernación está habilitada y no se admite la suspensión. Para activar la opción, la tecla de mayúsculas debe estar presionada mientras se hace clic. Puede ocurrir un problema si exigimos a Windows que nos vuelva a pedir nuestra contraseña de usuario al arrancar de nuevo: podría considerar que la tecla de mayúsculas continúa pulsada y que la contraseña no se interpretara correctamente. Una solución es pulsar una o varias veces las teclas de mayúsculas para "desbloquearlas" y devolverlas al estado de no pulsadas.

hibernar-bienvenida

Existe una tercera posibilidad que ya comentaré en otro artículo.

Inicio clásico

Si tenemos Windows 2000 o Windows Server 2003, o usamos Windows XP sin la pantalla de bienvenida, la opción Hibernar se encontrará dentro de la lista desplegable de opciones de cierre del sistema (menú Inicio, Apagar...).

hibernar-clasico

Investigación de un BAD_POOL_HEADER subtipo 0x20 (I)

Ha habido un crimen: una rutina de gestión de memoria, ExFreePoolWithTag, se ha encontrado malherido a un pool y no hay testigos del suceso. Un amigo de la víctima, acompañado de ExFreePoolWithTag, ha declarado: "ya estaba así cuando llegué, yo sólo quería devolverle un préstamo que me hizo y ExFreePoolWithTag me ha avisado; ha sido horrible". La policía no tiene pruebas contra él.

Hace poco me enfrenté en mi sistema Windows XP Service Pack 2 a un error de pantalla azul de tipo BAD_POOL_HEADER (STOP 0x19) con el primer parámetro igual a 0x20. Cada vez que se solicita una asignación o liberación dinámica de memoria del kernel, las rutinas correspondientes comprueban la consistencia de las estructuras de gestión dinámica de memoria (pools). Si observan alguna corrupción seria detienen la máquina, siendo BAD_POOL_HEADER uno de los posibles códigos de error. Esto se debe normalmente a validación insuficiente de punteros: algún módulo ha escrito en una zona de memoria que no debería corresponderle, pero en modo kernel no hay forma de hacer respetar ciertos límites.

Vemos así que la causa del problema no se revela inmediatamente, ya que el daño se observa a posteriori, después de que haya ocurrido, no en el momento en que sucede. Además, la información de la pila de llamadas (call stack) no es concluyente en la mayoría de los casos: el módulo que pidió el bloque de memoria afectado por la corrupción (el que consta en el volcado de pila) no tiene por qué ser el mismo que lo ha corrompido.

El error BAD_POOL_HEADER engloba varios tipos de infracción. El que nos interesa aquí es el que tiene el primer parámetro igual a 0x20 (32 en hexadecimal). La documentación de Microsoft lo describe así:

Parámetro 1 Parámetro 2 Parámetro 3 Parámetro 4 Causa del error

0x20

La entrada del pool que debería haberse encontrado

La siguiente entrada del pool

Reservado

El tamaño de la cabecera del bloque de pool se ha corrompido

En un próximo artículo expondré el problema concreto que tuve y cómo pude demostrar quién lo provocaba. Sin embargo, cada pantallazo azul es un mundo: las técnicas que mostraré quizá no sean eficaces ante casos similares, pero serán mejores que no hacer nada.

Actualización (7/6/2007): la puesta a punto de la segunda parte se demorará unos días más. Borré los archivos de volcado de memoria antes de decidirme a escribir sobre el proceso de investigación y tampoco guardé el registro de texto del depurador. Ahora estoy intentando reproducir las condiciones del problema para obtener nuevos volcados de memoria, pero no es tan sencillo como pensaba. Lo siento.

Licencia

El contenido de este blog se ofrece bajo el siguiente tipo de licencia de Creative Commons:

Creative Commons License

Búsqueda

Ir

Este blog

Sindicación

Notas

  • Por decisión del administrador, los visitantes que no inicien sesión (visitantes anónimos) no podrán enviar comentarios a los blogs de Geeks.ms, para lo cual deberán registrar una cuenta de usuario e identificarse a través de la misma. Disculpen las molestias que esto pueda causarles.

Acerca de los contenidos

La información ofrecida en este blog se proporciona tal cual, sin garantías de ningún tipo, y no otorga ningún derecho. Usted asume el riesgo de poner en práctica cuantos procedimientos se expongan aquí. En particular, si ha venido buscando alguna solución para una tarea o duda escolar y no le ha servido el contenido, por favor no me eche la culpa. ;-)

Las anotaciones del blog representan una visión válida en el momento en que fueron publicadas o actualizadas. Más allá de esas fechas no se puede garantizar la veracidad de la información expuesta ni la exactitud o fiabilidad de los enlaces.

Los comentarios son responsabilidad exclusiva de sus autores respectivos. El dueño del blog se reserva el derecho de editar, eliminar o no publicar aquellos comentarios que a su criterio infrinjan reglas básicas de respeto y convivencia en la red. En el caso de la edición, se expondrá claramente esta circunstancia y el motivo de la misma. El dueño del blog podrá asimismo borrar los enlaces que se desvíen demasiado de los temas tratados, muestren intenciones de autopromoción (publicidad descarada, spam...) o en general no inspiren confianza. Las direcciones de correo electrónico serán eliminadas o alteradas para reducir la posibilidad de que sean objeto de spam. El envío de comentarios implica la adhesión a estas condiciones.

Etiquetas

Archivo

Colegas en Geeks.ms

Otros bloggers españoles

Bloggers de Microsoft

Herramientas interesantes

Geeks.ms

Mi blog personal

Webs y comunidades amigas