26/2/09

Detalles del arranque de Windows XP

En el post anterior vimos como era el arranque de linux, ahora le toca el turno a winbugs!

La BIOS ROM:
Nada más pulsar el botón de encendido del PC se cargan las instrucciones contenidas en el POST (power-on self test o ‘autotest de encendido’) de la BIOS.
El POST hace unas comprobaciones básicas y toma la configuración del CMOS (complementary metal-oxide semiconductor o semiconductor complementario de óxido metálico). Son las instrucciones del CMOS las que determinan, entre otras cosas, el orden de los dispositivos de arranque.

Microsoft:
Durante este proceso se verifica cual es el primer dispositivo de arranque, y si este es un disco duro Básico, le pasará el control al MBR (master boot record o registro maestro de arranque).
El MBR está contenido en el primer sector físico del disco duro y es como una especie de índice que contiene toda nuestra tabla de particiones.
Este índice es creado cuando particionamos el disco duro y contiene un pequeño código ejecutable que damos en llamar Master Boot Code. El MBR es el encargado de llevar a cabo las siguientes operaciones.
  1. Busca en la tabla de particiones cual es la primera partición activa para transferirle el control
  2. Revisa cual es el sector de inicio de la partición que esté configurada como activa
  3. Carga un copia del sector de inicio desde la partición activa en memoria y finalmente transfiere el control al código ejecutable del sector de inicio
Si durante este proceso no se pueden completar alguna de estas operaciones, nuestra máquina presentará alguno de estos mensajes:
  • Invalid partition table.
  • Error loading operating system.
  • Missing operating system.
El sector Maestro de Arranque y el sector de inicio:
Una vez terminado el trabajo del MBR este, como hemos visto, transfiere al control al Sector de Arranque o Boot Sector, de nuestra partición activa en sistemas Windows, la primera partición activa es básica puesto que suele contener los archivos básicos de arranque de Windows y suele coincidir con la letra “C”.
En terminología informática esta partición también es llamada volumen de sistema, que puede coincidir con el volumen de inicio, si la primera partición activa, es decir nuestro volumen de sistema, también alberga al sistema operativo, aunque es cada vez más habitual que el volumen de sistema y de inicio no coincidan.
En cualquier caso, nuestro sector de arranque asume las siguientes operaciones:
  • Las instrucciones de inicialización para CPU basada en x86 (esta es la familia de procesadores Intel en la que funciona habitalmente Windows XP)
  • La identificación original del fabricante de nuestro PC, en el caso de que nuestro sistema sea OEM.
  • La BIOS Parameter Block, BPB
  • la BIOS Parameter Block, Extendida.
  • El código ejecutable que inicia nuestro sistema operativo.
Así pues, el siguiente paso, una vez leídas las instrucciones de inicialización para CPU basadas en x86, sería cargar la BPB.
La BPB contiene la estructura básica del volumen y las controladoras de disco utilizan este sector para leer y configurar los parámetros básicos de los volúmenes contenidos en nuestro disco.
También es un proceso básico puesto que es el encargado de transferirle el control al código ejecutable, que es en sí, el que va a iniciar nuestro sistema operativo.
Unos parámetros incorrectos en la BPB impedirán por tanto la carga del Sistema Operativo y explican porqué no podemos iniciar cualquier Windows si lo cambiamos de máquina, ya que la BPB se basa en parámetros físicos más que en parámetros lógicos.

El archivo NTLDR:
Ahora empiezan a intervenir los archivos propios del sistema operativo.
En todos los sistemas con núcleo NT (por ejemplo Windows XP o Windows 2000) el cargador se llama ntldr (de “nt loader”), y se encuentra en la partición activa o volumen de sistema (habitualmente C).
El archivo ntldr es el encargado de leer el sistema de archivos tanto de una partición NTFS como de una FAT.
Lo primero que hace el ntldr es cargar un serie de controladores básicos de dispositivos que van embebidos en este archivo, justo a continuación lee la información contenida en el archivo boot.ini que se encuentra oculto en el directorio raíz de nuestro volumen de sistema es decir en C, y que referencia qué tipo de Sistema Operativo tiene que cargar.
Supongamos que tenemos un arranque dual de XP y Windows 98. Si en el menú de arranque elegimos en este momento Windows 98, el ntldr pasará el control al bootsect.dos (para que se inicie Windows 98).
Si elegimos XP o un Sistema Operativo basado en núcleo NT se le pasa el control al ntdetect.com que es el encargado de la detección del hardware instalado.
Nuestro archivo ntdetect.com¸ se encarga de cargar la información contenida en nuestro perfil de hardware y las tablas de la ACPI, y las envía para su inclusión a nuestro archivo de arranque ntldr, para ser agregadas en la clave del registro:
  • HKEY_LOCAL_MACHINE\HARDWARE
El Kernel (núcleo) utiliza datos internos que provee el propio ntldr para crear la clave mencionada, cuya información será renovada en cada arranque de nuestra máquina, en base al hardware que se detecte durante cada inicio de nuestra máquina.
De vuelta al ntldr, este pasará el control al archivo ntoskrnl.exe, es decir, el núcleo del sistema operativo (el nombre del archivo proviene de “nt operating system kernel”), y al archivo HAL (hardware abstraction layer o capa de abstracción del hardware), y leerá la información contenida el fichero “system” que tenemos ubicado en la carpeta \windows\system32\config.
Son el HAL y el kernel los encargados de poner en funcionamiento el software, mediante una serie de componentes llamada Windows executive. Estos componentes están almacenados en los “conjuntos de control” del registro (control sets).
Concretamente los podemos encontrar referenciados en la clave del registro:
  • HKEY_LOCAL_MACHINE\SYSTEM
Esta clave es utilizada para múltiples propósitos entre ellos determinar qué drivers deben ser cargados durante cada arranque de nuestro sistema, en base al hardware cargado.

Carga de Drivers y servicios
:
Ahora prestemos atención a los drivers y a los servicios. Están contenidos, respectivamente, en las siguientes carpetas a las que puede accederse directamente desde Inicio > Ejecutar y escribir los siguientes:
  • Drivers -> %systemroot%\System32\Drivers
  • Servicios -> %systemroot%\System
  • Puesto que los drivers también son servicios, en este momento el núcleo lee la información de la clave
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
Se arrancarán primero los servicios que tengan el valor Start puesto a ‘0’ (los drivers de arranque) y luego los que tengan dicho valor puesto a ‘1’.
Ahora llega el proceso en el que interviene el Administrador de sesión (Session Manager, smss.exe).
Éste crea variables de entorno, cambia a modo gráfico, y además de otras cosas, se encarga de arrancar el Administrador del logon (Logon Manager, winlogon.exe). El administrador de sesión lee tres claves:
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\SessionManager
en la que, por ejemplo, podría haber una referencia al “autochk.exe” (una versión del chkdsk), por si se necesita cargarse,
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\SessionManager\Subsystem
con los distintos subsistemas,
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
y acudiría a los servicios cuyo valor Start esté en “Auto-load”.
Si antes del logon quisiéramos que se nos cargarse alguna aplicación (no configurada como servicio, sino digamos que de forma “normal”) tendremos que colocarlas en alguna de estas dos claves del registro:
  • HKEY_LOCAL_MACHINE\Sofware\Microsoft\Windows\Curre ntVersion\RunServicesOnce
  • HKEY_LOCAL_MACHINE\Sofware\Microsoft\Windows\Curre ntVersion\RunServices
Estas dos claves se cargan de forma asíncrona. Por tanto, su contenido puede cargarse al mismo tiempo y no necesariamente en el orden especificado en las claves. Es más, aunque se cargan en el orden propuesto, se cargan también de forma asíncrona con el propio proceso de Inicio en sí, por lo que podría ser que continuasen cargándose después de introducir el nombre de usuario y contraseña.
Precisamente, como ya se ha indicado, la utilidad de estas dos claves es introducir aplicaciones en ellas para que se carguen antes del logon.

Iniciando Windows:
En este momento es winlogon.exe quien toma el control. Inicia el Administrador de control de servicios (Service control manager) el Local security authority (lsass.exe) y la Autentificación e Identificación Gráfica (Graphical Identification and Authentification, GINA) y pide al usuario (si así está configurado) un nombre y una contraseña.
De la autentificación de ese usuario y contraseña se encarga el protocolo Kerberos V5 o bien NTLM. (Como comentario totalmente aparte, comentar que Kerberos es el nombre inglés del perro de dos cabezas Cancerbero que era encargado de custodiar las puertas del infierno en la mitología).
NTLM proviene de NT Lan Manager, y se usa sobre todo en grupos de trabajo, Windows 95 y Windows 98.
Es en esta fase cuando ciertas claves del registro son adaptadas si el arranque ha tenido éxito, entre ellas las claves Control sets que anteriormente mencionaba, haciendo una nueva copia de la misma.
Las políticas de grupo locales que tengamos aplicadas también toman efecto en este punto y comienzan a cargarse ciertas claves que inicializan determinados programas y servicios no cargados con anterioridad.

Después de la autentificación:
Tras introducir el usuario y la contraseña, se cargan las claves:
  • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup
  • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
Esta clave se carga de forma síncrona aunque su contenido no tiene por qué cargarse en el orden especificado. Esto también significa que si esta clave no se carga completamente no se cargan las siguientes.
Igualmente, esta clave no se carga hasta que no se han cargado las anteriores claves.
A continuación se carga la clave
  • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx.
A partir de aquí, y el orden de carga vuelve a ser asíncrono y, digámoslo así, todo se carga el mismo tiempo (más o menos) pudiéndose solapar unas cosas con otras. A continuación se carga lo siguiente:
  • Sección Load del Win.ini
y luego:
  • Sección Run del Win.ini
A continuación la clave:
  • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
que contiene los programas instalados en la máquina y la clave.
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Run
que contiene los programas instalados específicamente en el usuario autentificado. También se carga la clave.
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\RunOnce
Hasta ahora digamos que lo que se ha cargado ha sido el núcleo de Windows y el contenido del registro. Ahora se acude a las carpetas del menú inicio:
  1. Documents and Settings\All Users\Menú Inicio\Programas\Inicio
  2. Documents and Settings\[usuario]\Menú Inicio\Programas\Inicio
A continuación se carga la clave:
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\RunOnce
y finalmente las tareas programas que se tengan.
Los elementos de los menú de inicio se cargan de forma alfanumérica. Por ejemplo, “a01.exe”, “a10.exe” y “b2p.exe” se cargan en ese orden. Si nos interesa alterar el orden de carga, tendríamos que renombrar los archivos.

Otras claves utilizadas durante la inicialización de Windows:
Todas las que hemos relatado en el apartado anterior suelen ser las utilizadas comúnmente para inicializar programas, antes o después de la fase de autentificación, pero quizás sea conveniente anotar alguna ubicación más en el registro que tiene el mismo propósito: iniciar nuestros programas.
Una de las ubicaciones más esotéricas y menos conocidas para iniciar programas es la clave Load, ubicada en la rama:
  • HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\Cur rentVersion\Windows\load.
En esta clave y en esta rama, podríamos especificar programas que se iniciarían sólo en la sesión de usuario que esté actualmente logado (autenticado).
La clave análoga que afectaría a todos los usuarios de la máquina es denominada userinit, que podremos encontrar en la rama:
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\Cu rrentVersion\Winlogon\Userinit
Esta última clave, a diferencia de la clave Load, que anteriormente comentábamos, se encuentra presente en todos los sistemas y suele contener un único valor que apunta al ejecutable o proceso userinit.exe, que está encargado de inicializar los parámetros de inicialización de la Shell de Windows. Esta clave acepta valores separados por coma (CSV) por lo que es posible agregar más valores al ya comentado en esta clave.
Finalmente también podemos ejecutar diferentes procesos en la clave Explorer\Run
que podremos encontrar en las ramas,
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Policies\Explorer\Run
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Policies\Explorer\Run.
Detección de dispositivos Plug and Play:
La detección de este tipo de dispositivos que son detectados e instalados casi sin que el usuario interactúe para nada con el sistema, son cargados asincrónicamente durante la fase de autentificación. Esta fase de detección se basa fundamentalmente, en el firmware de cada dispositivo hardware conectado y en las características internas que el S.O. posee para la detección de nuevos tipos de dispositivos. Windows XP está optimizado para la detección de dispositivos que cumplan con la normativa ACPI.

No hay comentarios.: