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
- 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 porque 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 WinXP 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 que 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.
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 envia para su inclusión a
nuestro archivo de arranque ntldr, para ser agregadas en la clave del registro.
HKEY_LOCAL_MACHINE\HARDWARE
El
Kernel 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á 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\Control\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\Control\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:
[1] HKEY_LOCAL_MACHINE\Sofware\Microsoft\Windows\CurrentVersion\RunServicesOnce
[2] HKEY_LOCAL_MACHINE\Sofware\Microsoft\Windows\CurrentVersion\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 (primer [1]y
luego [2]), se cargan también de forma asíncrona con el propio proceso
de logon 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 coloar
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). Para más
información sobre el protocolo Kerberos.
NTLM proviene de NT Lan Manager, y se usa sobre todo en grupos de trabajo, Windows 95 y Windows 98.
Es en está fase cuando ciertas claves del registro son adaptadas si el arranque ha tenido éxito, entre ellas las claves Control sets que anteriormente mencionabamos, 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:
[3] HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup
[4] HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
Esta clave [4] se carga de forma síncrona aunque su contenido no tiene por qué cargarse en el orden especificado. Esto también significa que esta que esta clave no se carga completamente no se cargan las siguientes. Igualmente, esta clave [4] no se carga hasta que no se han cargado las anteriores claves [1], [2] y [3].
A continuación se carga la clave
[5] HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx.
A
partir de aquí, y hasta el item [12] 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:
[6] Sección Load del Win.ini
y luego
[7] Sección Run del Win.ini
A continuación la clave
[8] HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
que contiene los programas instalados en la máquina y la clave
[9] HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
que contiene los programas instalados específicamente en el usuario logueado. También se carga la clave
[10] HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\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. Primero, las de todos los usuarios
[11] Documents and Settings\All Users\Menú Inicio\Programas\Inicio
y luego los del usuario logueado
[12] Documents and Settings\[usuario]\Menú Inicio\Programas\Inicio
donde [usuario] es el nombre de la cuenta en la que se ha iniciado sesión. A continuación se carga la clave
[13] HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
y finalmente las tareas programas que se tengan.
Vuelvemos
a repetir que hasta [12] el proceso de carga se hace de forma
asíncrona, por lo que podrían solaparse unas claves con otras y unos
archivos con otros. 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\CurrentVersion\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 loguado. 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\CurrentVersion\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\CurrentVersion\Policies\Explorer\Run HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\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 interactue 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:
Publicar un comentario