Qual è il processo di avvio di Windows 7?

Questo processo di avvio è per lo più identico tra Windows Vista e Windows 10. Ci sono però due varianti che esplorerò: Legacy Boot (da Vista) e UEFI boot (da 7, realmente supportato da 8).

In Legacy boot, il BIOS trova il disco dove è installato Windows, legge l'MBR, controlla gli ultimi 2 byte se corrispondono a un certo schema (segna come bootable), se sì li carica in memoria a un indirizzo fisso ed esegue il codice dal primo byte del settore caricato. Il codice in quel settore decodifica i dati della partizione (anche all'interno del settore; avete 446 byte di codice e 4 partizioni di 16 byte ciascuna), scopre quale di esse è la partizione attiva, controlla che sia avviabile (stessa firma negli ultimi due byte) e, se è così, la carica a catena (a un indirizzo diverso immagino?). Il primo settore del disco è il master boot record (MBR), il primo della partizione è il partition boot record (PBR).

Il PBR può lavorare con tutti i suoi 510 byte come codice, anche se alcuni possono effettivamente contenere una firma del file system. Il codice cercherà di caricare un file non compresso dal disco, cioè "bootmgr". Questo file viene caricato continuamente e, di nuovo, ad un indirizzo fisso. E potrebbe essere grande quanto necessario, e infatti è abbastanza grande. Dopo aver caricato bootmgr, passare alla sezione dopo aver caricato bootmgr.

Nell'avvio UEFI, il firmware:
1) Controlla le voci di avvio memorizzate nell'hardware, e le prova tutte. Se la prima non viene trovata o non è più valida, o semplicemente esce di nuovo al firmware (perché sì, è facile uscire dal firmware a differenza del caso MBR dove tecnicamente è possibile), prova la successiva.
2) Se nessuna di queste voci di avvio viene considerata, ora cerca di trovare una partizione su ogni disco (di solito la partizione di sistema EFI, anche se questo varia) e trova efibootbootx64.efi (penso che questo percorso sia corretto; qualcuno mi dica se non lo è) e cerca di avviarlo.
3) Una volta trovata la voce di avvio corretta (in realtà un file .efi, che ha un certo formato di file molto simile agli eseguibili di Windows, ma non direttamente eseguibile sotto Windows), viene caricato ed eseguito. UEFI bootmgr caricato.

Dopo aver caricato bootmgr, il gestore d'avvio controlla le proprie configurazioni (alveari di registro, essenzialmente un formato di database identico a quello usato negli alveari di registro di Windows attuali; infatti queste configurazioni sono sempre montate nel registro di Windows dopo l'avvio) e trova la configurazione del sistema Windows che deve essere avviato, O che deve caricare un sistema Windows dall'ibernazione. Se la seconda, cerca l'eseguibile winload.exe per quel sistema Windows e lo carica a catena, proprio così (quello carica i dati dal file di ibernazione e abbiamo finito). Se invece è il primo, cerca ntoskrnl.exe (il kernel di Windows), non sono sicuro se sia il kernel o il boot manager a caricare i driver critici (gli altri sono caricati dal kernel quasi sicuramente). Dopo che il kernel è stato caricato, il gestore d'avvio lo mette nella sua posizione di memoria quasi finale e gli dà il controllo.

Una volta caricato il kernel, vengono caricati i driver aggiuntivi, vengono montati gli hives del registro di sistema, vengono inizializzati i dispositivi (usando il codice nei driver), poi viene avviato lo spazio utente (viene generato il processo smss.exe, questo genera i processi csrss.exe per tutte le sessioni, il processo wininit.exe per la sessione 0 e il processo winlogon.exe per le altre sessioni). Poi nella sessione 0, wininit.exe va avanti e lancia services.exe, che a sua volta lancia tutti i servizi di Windows; lsass.exe che implementa varie azioni critiche relative alla sicurezza. I vari servizi vengono lanciati (ce ne sono troppi, e variano da sistema a sistema a seconda del software installato), questi possono lanciare altri processi ecc.

winlogon.exe può lanciare logonui.exe (che mostra la schermata di blocco/login), userinit.exe (un processo temporaneo per lanciare la shell dell'utente, di solito explorer.exe che mostra le icone del desktop e la barra delle applicazioni, e per il resto eseguire le configurazioni iniziali delle sessioni utente, cioè le sessioni >0), dwm.exe (Aero compositor, obbligatorio da Windows 8).

E poi è un territorio inesplorato per me. Perché è tutto variabile, a seconda del software installato. explorer.exe può lanciarne alcuni, i servizi possono lanciarne altri che a loro volta lanciano altri programmi utente, a seconda della configurazione dell'utente, e così via.