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.
- Busca en la tabla de particiones cual es la primera partición activa para transferirle el control
- Revisa cual es el sector de inicio de la partición que esté configurada como activa
- 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
- Invalid partition table.
- Error loading operating system.
- Missing operating system.
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.
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
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
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
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
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\SessionManager\Subsystem
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
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
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
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.
- Sección Load del Win.ini
- Sección Run del Win.ini
- HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
- HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Run
- HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\RunOnce
- Documents and Settings\All Users\Menú Inicio\Programas\Inicio
- Documents and Settings\[usuario]\Menú Inicio\Programas\Inicio
- HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\RunOnce
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.
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
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.
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.