#!/bin/bash # ============================================================ # fws-bcd-write — construit un magasin BCD Windows OFFLINE depuis Linux (hivex). # # ⚠⚠ NON VALIDÉ SUR MATÉRIEL RÉEL. Le BCD est un hive registre propriétaire ; # `bcdboot` (l'outil officiel qui l'écrit correctement) est Windows-only. On # copie le BCD-Template livré avec Windows et on patche les éléments STRING # qu'on maîtrise ; l'élément BINAIRE « device »/« osdevice » (blob encodant la # partition GPT — DISK_GUID + PARTUUID) est LA surface à auditer et n'est PAS # encodé de façon fiable ici. Tant que ce n'est pas prouvé sur un Windows 11 # 25H2 réel, on renvoie un code d'échec → l'orchestrateur bascule sur # fws-windows-bcdfix (WinPE-bcdboot), qui utilise le vrai bcdboot. # # Args : # Codes : 0 = BCD écrit & jugé sûr ; 1 = bascule sur le repli WinPE. # ============================================================ set -u ESP="${1:-}"; WIN="${2:-}"; PARTUUID="${3:-}"; DISKGUID="${4:-}" [ -d "$ESP" ] && [ -d "$WIN" ] || { echo "[bcd-write] args invalides"; exit 1; } command -v hivexregedit >/dev/null 2>&1 || { echo "[bcd-write] hivex absent → repli"; exit 1; } TMPL="$WIN/Windows/System32/config/BCD-Template" [ -f "$TMPL" ] || { echo "[bcd-write] BCD-Template absent ($TMPL) → repli"; exit 1; } DST="$ESP/EFI/Microsoft/Boot/BCD" mkdir -p "$(dirname "$DST")" cp -f "$TMPL" "$DST" echo "[bcd-write] BCD-Template copié → $DST (device cible $PARTUUID / disque $DISKGUID)." # ⚠ Le patch du blob « device » (Element 0x11000001) encodant la partition n'est # pas implémenté de façon vérifiée ici → on force la voie robuste WinPE-bcdboot. echo "[bcd-write] ⚠ NON VALIDÉ (blob device non encodé) → bascule sur fws-windows-bcdfix." exit 1