Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Pasos detallados y nombres de archivos para cargas específicas durante el inicio de Windows?

¿Pasos detallados y nombres de archivos para cargas específicas durante el inicio de Windows?

Léelo con atención, tal vez obtengas algo:

Introducción al proceso de inicio de Windows

Creo que muchas personas se han encontrado con eso después de instalar algo. , Reinicie Windows y descubra que no puede iniciarse. Por lo tanto, me gustaría presentarles lo que se hace durante el proceso de inicio de Windows y en qué etapas se divide.

Lo que se presenta aquí es el proceso de inicio de la serie Windows 2k/xp/2k3, que es muy similar al de la serie nt.

Aunque Windows no es de código abierto (¡tonterías! :o), todavía hay mucha información disponible, incluidos símbolos públicos proporcionados por MS. Si tienes la oportunidad de probar la depuración en tiempo real del Kernel, Entonces te creo. Aún queda mucho por ver. Pero claro, eso no es algo que haya hecho... Lo intentaré nuevamente cuando regrese e instale VMWare o algo así en mi propia máquina, documentaré el proceso y lo publicaré. Aquí está.

El proceso de inicio de Windows incluye las siguientes partes:

1. Registro de inicio maestro (MBR)

2 Sector de inicio

3. Ntldr (Algunas personas pueden estar familiarizadas con esto. ¿Alguna vez ha encontrado que Ntldr no se encuentra durante el inicio?

4. Ntoskrnl.exe

5.

6.Winlogon

7.Service Control Manager (SCM)

Bien

En esta publicación de blog, comenzaré con base en lo anterior. El proceso se realiza. Estos componentes uno por uno, por supuesto, la mayor parte de esto está tomado de los capítulos correspondientes (Inicio y Apagado) de los libros "Inside Windows 2000" y "Windows Internals". Todo lo que puedo hacer es básicamente traducirlo y parafrasearlo. puede haber como máximo algunos comentarios relacionados.

Por supuesto, si ha leído el código fuente del proceso de inicio de Linux, es posible que no esté satisfecho con el siguiente contenido. Básicamente, las partes relacionadas con el hardware no estarán satisfechos. Se discutirá aquí (puede que solo agregue contenido relacionado con el hardware que conozco), quien nos dijo que no miráramos el código fuente, jaja

Bienvenido a discutir y agregar

<. p>P.D. Sólo estoy aquí para tomar asiento, pero no sé de qué estoy hablando :cool:

------------------ --------. ----------------------------------------- --------- ----------------------------------------- ----

1.MBR y sector de arranque

El disco duro físico se direcciona por sectores. El programa de instalación de Windows escribirá algo de contenido en el primer sector del disco duro. e instalará esta parte del sistema en este sector. El contenido se llama registro de arranque maestro (MBR).

El registro de arranque maestro consta de dos partes:

(1). ). Código de arranque;

(2). Tabla de particiones;

Código de arranque, es decir, código de inicio. Este código se ejecuta cuando el sistema se inicia. -prueba, seleccione el dispositivo de inicio (es decir, uno de los discos duros) y luego lea el MBR del disco duro en la memoria y salte a la dirección del MBR para ejecutar el código de inicio. La tabla de particiones solo tiene 4 entradas porque MS OS permite dividir el disco en hasta 4 particiones primarias

. El contenido de la tabla de particiones aquí es la información de estas 4 particiones, incluidos sus sectores iniciales. ,

indicadores correspondientes, etc.

Durante el proceso de inicio, el código de inicio del MBR busca en la tabla de particiones una partición con el indicador de inicio (también llamado Activo), luego lee el primer sector de la partición (el sector de arranque) y ejecuta el código en él.

Antes de que el instalador escriba el sector de arranque, necesita conocer el tipo de sistema de archivos de la partición (FAT, FAT32, NTFS) y luego escribir

un sector de arranque diferente.

¿Por qué diferentes sistemas de archivos requieren diferentes sectores de arranque? La razón es que la tarea del sector de arranque es cargar el archivo de arranque del sistema operativo y el proceso de carga del archivo requiere la participación del sistema de archivos. Por lo tanto, para diferentes sistemas de archivos, se requieren diferentes códigos de soporte del sistema de archivos en el. sector de arranque. para completar la carga de archivos del sistema. Para el arranque de Windows

, el archivo que debe cargarse es Ntldr.

Cabe añadir que el código de soporte del sistema de archivos en el sector de arranque está "minimizado". Después de todo, un sector de arranque tiene sólo

512 bytes de tamaño como máximo y es poco probable que venga con un sistema de archivos completo. Además, nuestros requisitos son simples: solo queremos que comprenda el sistema de archivos y lea los archivos que contiene, sin escribir archivos.

Después de cargar Ntldr en el sector de arranque, saltará al punto de entrada de Ntldr y la siguiente tarea se entregará a Ntldr. En este punto,

el sistema todavía se está ejecutando en modo real de 16 bits y Ntldr activará la paginación y entrará en modo protegido de 32 bits.

Durante este proceso, puede aparecer el siguiente mensaje de error:

Para sistemas de archivos NTFS, "BOOT: No se puede encontrar NTLDRP";

Para archivos FAT system, "NTLDR desaparecido";

Este error indica que el sector de arranque no encontró Ntldr en el directorio raíz de la partición.

------------------------------------------- ----- --------------------------------------------- ----- ------ ------------------

2. NTLDR

NTLDR es un " intermediario". Cuando el sector de arranque ingresa a NTLDR, el sistema está en modo real y cualquier dirección a la que accede el programa es una dirección real, es decir, una dirección física. Esta es la dirección física (y, por supuesto, las capacidades de segmentación básicas de 80x86, que debe conocer si ha estudiado este ensamblaje en modo real), y este rango de direcciones también está limitado a 1 M (dirección de 20 bits). Por lo tanto, lo primero que debe hacer después de ingresar a NTLDR es cambiar al modo protegido para tener acceso completo al rango de direcciones de 32 bits. Sin embargo, dado que la tabla de páginas correspondiente no se ha configurado en este momento, no hay traducción de direcciones reales a virtuales (es decir, aún no está paginada).

NTLDR necesita inicializar una tabla de páginas y luego activar la paginación. En este punto, el sistema ya se encuentra en el estado estándar de Windows (modo protegido + paginación). Una cosa que me perdí cuando hablé de pasar al modo protegido es inicializar GDT e IDT. La clave aquí es que Windows usa un modo de memoria plana, lo que significa que en modo protegido, la dirección base de todos los segmentos es la misma. Este punto está estrechamente relacionado con su mecanismo de gestión de memoria, por lo que lo mencionaré primero aquí.

Mientras el sistema está en modo protegido, NTLDR todavía depende de algunas llamadas al BIOS para acceder al disco y mostrar el sistema. Si el disco es SCSI y las llamadas al BIOS no pueden acceder a él, NTLDR cargará Ntbootdd.sys en lugar del código de acceso al disco en el código de inicio. NTLDR es similar al sector de arranque y también contiene código de solo lectura para sistemas de archivos NTFS y FAT, pero se diferencia en que tiene un acceso ligeramente mejorado a los subdirectorios.

Desde Windows 2000, existe un método de "hibernación" para apagar el sistema. NTLDR necesita verificar si hay un archivo Hiberfil.sys válido en el sistema. Si existe, significa que el último apagado fue por hibernación.

Entonces NTLDR toma un atajo: lee el archivo Hiberfil.sys y salta directamente al código del kernel que "despierta la hibernación" e inicia la computadora.

En condiciones de arranque normales, NTLDR lee el archivo boot.ini. Si el archivo parece tener varias opciones de inicio, se muestra un menú de inicio para que el usuario elija.

Aquí existe una posible excepción, aunque ahora es muy poco probable. La excepción a esto es la presencia de opciones de arranque de DOS (series Win9x y ME). En este caso, NTLDR carga el archivo Bootsect.dos, vuelve al modo real y salta al código MBR del archivo. En este punto, NTLDR está en el mismo estado que al comienzo del proceso de inicio (leyendo el MBR) y se inicia el sistema operativo correspondiente.

Después de que el usuario selecciona el menú de inicio, NTLDR también necesita hacer algo según los parámetros del elemento. Estos parámetros no se explican aquí.

Luego continuamos...

NTLDR carga y ejecuta Ntdetect.com, un programa en modo protegido de 16 bits llamado por el BIOS para obtener información del hardware del sistema (como el tipo de bus, hora del sistema, unidades de disco, puertos serie y paralelo, etc.), y luego agregue esta información y devuélvala a NTLDR, guardándola en la etiqueta de registro en HKLM\HARDWARE\DESCRIPTION.

Todo el trabajo anterior parece realizarse en segundo plano y no es visible para el usuario, excepto quizás un menú de inicio. Bien, a continuación es el momento de dar a los usuarios algunos comentarios.

NTLDR limpia la pantalla y muestra "Iniciando Windows" y una barra de progreso. La diferencia entre 2000 y XP/2003 es que la barra de progreso que se muestra en 2000 es en blanco y negro y no hay ningún logotipo de Windows en la pantalla, mientras que la barra de progreso que se muestra en XP/2003 está coloreada con el logotipo de Windows (jaja, las pantallas a color son populares ahora). Tenga en cuenta que la barra de progreso de NTLDR está vacía hasta que comience la carga del "controlador de arranque".

Otra cosa que puede notar es que cuando se muestra "Iniciando Windows", también hay un mensaje debajo: "Para solución de problemas y inicio avanzado. Para solución de problemas y opciones de inicio avanzadas para Windows, presione F8 (Para". Solución de problemas de Windows y opciones de inicio avanzadas, presione F8), luego, cuando aparece la barra de progreso y comienza a desplazarse (hacia adelante), no hay posibilidad de presionar F8 para ingresar al modo seguro u otros modos. De hecho, hay una razón para esto. Porque antes de que el sistema comience a cargar el controlador, lo principal que hace es cargar los archivos del kernel y la sección del sistema en el registro. Estas dos cosas no tienen nada que ver con otros métodos de inicio, como el modo seguro. Tanto el modo seguro como el inicio estándar necesitan cargar estas dos cosas. La diferencia entre el modo seguro y el modo estándar es que cargan controladores diferentes. Por lo tanto, una vez que Windows comienza a cargar estos controladores de arranque, no hay forma de cambiar los modos en ellos.

Para que NTLDR comience a mostrar "Iniciando Windows", se requieren los siguientes pasos:

1. Cargue el kernel y HAL correctos (el valor predeterminado es Ntoskrnl.exe y Hal.dll). Si NTLDR encuentra un error al cargar estos dos archivos y no puede completar la carga, se mostrará el siguiente mensaje de error: Windows no puede iniciarse porque faltan los siguientes archivos o están dañados y le indicará el nombre del archivo que no se puede cargar.

2. Lea la sección del sistema desde \Windows\System32\Config\System.

Nota: hive es un archivo que contiene algún tipo de subárbol en el registro.

3. Busque todos los controladores de inicio en la sección del sistema (el valor inicial de dichos controladores es 0, es decir, SERVICE_BOOT_START). Todos los controladores del sistema tienen las subclaves correspondientes en el registro en HKLM\SYSTEM\CurrentControlSet\Services.

4. Cargue el controlador del sistema de archivos de la partición donde se encuentra el controlador de arranque para poder cargarlo más tarde.

5. En este momento, la barra de progreso en la pantalla comienza a actualizarse. Para Windows 2000, se trata de una barra de progreso en blanco y negro.

6. Configure los registros de la CPU y salte a la entrada Ntoskrnl.exe.

Bueno, el trabajo de NTLDR finalmente se completa y todo se entrega a Ntoskrnl. Por supuesto, al transferir el control, la información requerida por la otra parte (incluido el diseño de la memoria, la información del hardware, el subárbol del sistema, etc.) naturalmente se entregará a Ntoskrnl, de modo que NTLDR haya completado su misión

Estoy copiando Sí, pero espero que ayude!