Profi-Know-how: Windows Vista und Longhorn Bootmanager

15.06.2007 von Mike Hartmann
Die boot.ini von Windows XP hat ausgedient! Bei Vista und Longhorn funktioniert alles ganz anders und doch so ähnlich wie zuvor - allerdings etwas komplizierter.

In der boot.ini von Windows XP kann man sehr einfach mittels eines Texteditors zusätzliche Einträge für zu bootende Betriebssysteme definieren oder sogar ein bestehendes XP über Schalter wie maxmem unter anderen Rahmenbedingungen starten lassen.

Windows Vista wirft dieses Konzept aus mehreren Gründen über den Haufen. Zum einen bringt Microsoft Sicherheit als Argument, da die boot.ini zu einfach zu manipulieren sei. Zum anderen soll das neue System mehr Flexibilität erlauben, unter anderem auch die Kompatibilität mit EFI-Systemen.

Das neue Boot-System von Windows Vista ist in drei Komponenten aufgeteilt. Den Windows Boot Manager, die Laderoutine für das Betriebssystem und die Routine zum Fortsetzen von Windows aus dem Ruhezustand. Bis dato wurden diese Aufgaben komplett von ntldr erledigt.

Die bisher in der boot.ini abgelegten Informationen finden sich nun im so genannten Boot Configuration Data Store (BCD). Diese Binärdatei ist je nach System im NVRAM (EFI-Systeme) gespeichert oder im Verzeichnis \boot der Startpartition. Änderungen an der Boot-Konfiguration lassen sich nur noch über das Kommandozeilen-Tool bcdedit.exe durchführen, das wir im Folgenden näher beschreiben.

BCD - Struktur

Die BCD-Hierarchie sieht drei Ebenen vor: Store, Objekte, Elemente. Ein Store ist ein Container für BCD-Objekte, die wiederum BCD-Elemente enthalten. Ein typisches Objekt beschreibt eine Boot-Umgebung, etwa für ein installiertes Windows Vista. Die Elemente enthalten einzelne Einstellungen, wie den Namen, Debug-Settings oder das Device, auf dem das Betriebssystem zu finden ist.

BCD im Überblick: Der Store als Container für Objekte, die jeweils einzelne Elemente enthalten.
BCD im Beispiel: Der Store enthält ein Objekt für den Bootmanager, zwei für Vista/Longhorn und einen für Windows XP/2000.

Der Windows Boot Manager stellt ebenso ein eigenes BCD-Objekt dar. Die Elemente legen Parameter wie Timeout, Default-Betriebssystem und Anzeigereihenfolge fest. Im Grunde entsprechen die Einträge der Sektion [boot loader] in der boot.ini. Zudem findet sich mindestens ein Objekt Windows Boot Loader im Store. Ein solches Objekt entspricht einer Zeile unterhalb der Sektion [operating systems] der boot.ini.

Windows Boot Loader vs Legacy

Der Windows Boot Loader ist ausschließlich für Vista und spätere Windows-Versionen wie Longhorn zuständig. Für andere Betriebssysteme greift der Windows Boot Manager auf die als Windows Legacy OS Loader gekennzeichneten Objekte zurück.

Hierbei handelt es sich im Grunde lediglich um den Verweis auf einen weiteren Bootsektor, der ganz einfach nachgeladen wird. An diesen Boot-Loader wird dann die Kontrolle des weiteren Startvorgangs übergeben. Windows 2000/XP/2003 werden so beispielsweise gestartet.

Und hier kommt dann wieder die altbekannte boot.ini ins Spiel. Denn für den Start der alten Windows-Versionen wird einfach der ntldr aktiviert, der wiederum die boot.ini ausliest. Wer sich das Booten anderer Betriebssysteme wie Linux nun einfach machen will, nimmt unseren Artikel zur boot.ini zur Hand und trägt dort die entsprechenden Informationen ein. Die Folge ist allerdings, dass man sich dann durch zwei Boot-Menus hangeln muss: Erst das von Vista, in dem „Frühere Windows Version“ auszuwählen ist, und dann das bekannte Boot-Menu von Windows XP.

Bcdedit.exe - Bedienung

Eine Manipulation der Boot-Konfiguration erfolgt nicht mehr über einfaches Editieren einer Textdatei sondern über ein Kommandozeilen-Tool namens bcdedit.exe, das allerdings nur mit administrativen Rechten ausgeführt werden kann. Öffnen Sie also eine Kommando-Shell über das Kontextmenü „Als Administrator ausführen“ von Alle Programme/Zubehör/Eingabeaufforderung.

Kommandozeile: Die Konfiguration der Boot-Optionen erfolgt via Kommandozeile.

Nach Eingabe von bcdedit.exe /enum -v erhalten Sie eine Übersicht aller Objekte im BCD-Store. Hier wird auch schon die erste Krux beim neuen Bootsystem offensichtlich. Es unterscheidet die verschiedenen Einträge nämlich anhand einer 32-stelligen GUID. Soll nun eine Einstellung für einen Eintrag geändert werden, müssen Sie diese GUID auf der Kommandozeile mit angeben. Ein sicherlich sehr fehleranfälliges Verfahren.

Bevor Sie nun irgendwelche Änderungen an der BCD vornehmen, sollten Sie mittels bcdedit /export sicherung ein Backup anlegen. Diesen können Sie bei Bedarf mittels bcdedit /import sicherung wieder einspielen.

Setzen von Optionen

Generell werden Optionen mit der Befehlszeile bcdedit /set {GUID} Element Wert gesetzt. Dabei ist GUID durch die 32-stellige ID des Objekts zu ersetzen, Element durch die zu ändernde Option und Wert durch den neuen Eintrag. Um also beispielsweise die Anzeigedauer des Boot-Menus auf 10 Sekunden zu ändern:

bcdedit /set {9dea862c-5cdd-4e70-acc1-f32b344d4795} timeout 10

Glücklicherweise hatten die Entwickler wohl auch wenig Lust, andauernd 32-stelligen GUIDs einzutippen. Deshalb haben sie für einige Einträge Kürzel eingeführt:

Den Windows Boot Manager erreichen Sie auch mittels {bootmgr}, den Legacy Windows Loader mit {ntldr}, den Eintrag des aktuell gestarteten Windows via {current} und den als Default-Eintrag konfigurierten über {default}. Obige Zeile könnte also auch lauten:

bcdedit /set {bootmgr} timeout 10

Einige häufig gebrauchten Optionen haben die Entwickler sogar direkt als Parameter verfügbar gemacht, darunter auch timeout. Dementsprechend geht das Obige noch kürzer:

bcdedit /timeout 10

Multi-Boot - Vista, XP und Linux

Wenn Sie Vista oder Longhorn zusätzlich zu einem bestehenden XP/2003 installiert haben, sollte der dafür notwendige Eintrag bereits im BCD-Store existieren. Ist das nicht der Fall, erzeugen Sie ihn ganz einfach mit folgenden Befehlen:

bcdedit /create {legacy} /d “Windows XP”
bcdedit /set {legacy} device partition=D:
bcdedit /set {legacy} osdevice partition=D:
bcdedit /set {legacy} path \ntldr
bcdedit /displayorder {legacy} /addlast

Damit weisen Sie Vista an, einen Eintrag im BCD-Store zu erzeugen, der als „Windows XP“ im Bootmenu auftaucht und den Bootloader ntldr von der Partition D: zum Booten verwendet. Wie Sie sehen, haben wir den Shortcut legacy verwendet. Die letzte Zeile sorgt lediglich dafür, dass der neue Eintrag am Ende der Liste angezeigt wird.

Linux als Boot-Option

Wollen Sie zusätzlich ein Linux installieren, ist das auch nicht allzu schwer. Achten Sie bei der Installation von Linux lediglich darauf, dass der Bootloader von Linux nicht in den MBR geschrieben wird sondern in die Linux-Partition.

Den Bootloader kopieren Sie unter Linux mittels

dd if=/dev/xxx of=/bootloader.bin bs=512 count=1

in die Datei /bootloader.bin. Ersetzen Sie das xxx durch das Device, auf dem Linux installiert ist, also beispielsweise hda1. Die Datei bootloader.bin kopieren Sie sich auf einen USB-Stick. Das direkte Mounten und Beschreiben der NTFS-Partition von Vista ist nicht unbedingt empfehlenswert.

Starten Sie nun Vista und kopieren die bootloader.bin auf die Vista-Partition. Mit den folgenden Befehlen erzeugen Sie den Boot-Eintrag:

bcdedit /create /d “Linux starten” /application bootsector

Sie erhalten jetzt die neue GUID angezeigt, die Sie für die folgenden Befehle verwenden können.

bcdedit /set {neueGUID} device boot
bcdedit /set {neueGUID} path \bootloader.bin
bcdedit /displayorder {neueGUID} /addlast

Sonstige Optionen für Vista und Longhorn

Neben den beschriebenen Parametern kennt der Bootloader noch eine Vielzahl weiterer Parameter, die sich unter Vista und Longhorn verwenden lassen. Die wichtigsten finden Sie in der folgenden Tabelle. Gesetzt werden die Parameter immer nach dem Schema:

bcdedit /set {GUID} option wert

boot.ini-Optionen

Option

Werte

Beschreibung

quietboot

on / off

Damit wird der VGA-Treiber abgeschaltet, der für die Anzeige des Grafikbildschirms mit der Fortschrittsanzeige während des Bootens zuständig ist.

bootlog

yes / no

Wenn dieser Schalter angegeben ist, schreibt Windows eine Logdatei über den Bootvorgang. Diese heißt NTBTLOG.TXT und befindet sich dann im Windows-Verzeichnis.

sos

on / off

Damit gibt Windows alle während des Systemstarts geladenen Treiber auf die Konsole aus.

removememory

xx

Mit diesem Parameter „klauen“ Sie Windows xx Megabyte.

vga

on / off

Veranlasst Windows, im VGA-Modus zu starten.

onecpu

on / off

Damit nutzt Windows auch auf einem Multiprozessor-System nur eine CPU. Allerdings werden trotzdem HAL und Kernel für ein MPS-System geladen. Um das zu verhindern, verwenden Sie die auf der vorigen Seite beschriebenen Verfahren zur Installation alternativer HALs und Kernels.

usefirmwarepcisettings

yes / no

Verhindert, dass die HAL I/O- und IRQ-Ressourcen auf dem PCI-Bus neu verteilt. Stattdessen werden die vom BIOS zugewiesenen Werte verwendet.

Speicher begrenzen

Gerade Arbeitsrechner, die zur Software-Entwicklung eingesetzt werden, sind oft mit viel RAM ausgestattet. Aber um die Anwendung auch unter realen Bedingungen zu testen, sollte man einen Rechner mit einer realitätsnahen RAM-Bestückung verwenden. Über den Schalter removememory kann man das auch auf dem Entwicklungsrechner erledigen.

Um beispielsweise Vista statt mit 1024 MByte nur mit 512 MByte zu starten, muss man lediglich folgenden Befehl absetzen:

bcdedit /set {current} removememory 512

Eingeschränkt: Für Testzwecke kann man Windows aber auch anweisen, nur eine bestimmte Menge RAM zu nutzen.

Damit startet Windows ganz normal, außer dass jetzt weniger Speicher zur Verfügung steht und das System deutlich häufiger Daten in die Swap-Datei auslagern muss. Damit bekommen die Entwickler immerhin ein Gefühl dafür, wie ihre Anwendungen sich auf schwach bestückten Rechnern verhalten.

Speicherverwaltung mit pae und increaseuserva

Vista und Longhorn unterstützen mehr als vier GByte RAM im System. Damit Windows diesen zusätzlichen Speicher auch ansprechen kann, muss zusätzlich es via pae eingeschaltet werden. PAE wird automatisch auf Systemen eingeschaltet, die über Hot-Add-Speichersysteme verfügen, über die der Hauptspeicher auf über vier GByte ausgebaut werden könnte. Treten Probleme auf, schalten Sie testweise pae mittels bcdedit /set {GUID} pae forcedisable aus. Per forceenable schalten Sie pae fest ein und per default überlassen Sie Windows die Wahl.

Normalerweise teilt Windows den Adressraum für Applikationen wie folgt auf: Zwei GByte für Usermode-Programme und zwei GByte für Kernelmode-Programme. Braucht eine Applikation (etwa ein Datenbank-Server) nun mehr als diese zwei GByte, kann sie das nur erreichen, indem sie vom Betriebssystem virtuellen Speicher anfordert. Diese Vorgehensweise ist natürlich deutlich langsamer als direkter Speicherzugriff, auch wenn das Betriebssystem den virtuellen Speicher im RAM vorhält.

Der Schalter increaseuserva erlaubt eine flexiblere Aufteilung des Speichers. Geben Sie als Wert einfach den gewünschten Speicher für den Usermode an. Erlaubt sind Werte zwischen 2048 MByte und 3072 MByte. Den Rest des Speichers erhält der Kernel.

So sorgt bcdedit /set {GUID} increaseuserva 3072 beispielsweise dafür, dass die Aufteilung stattdessen drei GByte für Usermode- und ein GByte für Kernelmode-Programme lautet. Allerdings muss die Software mit dem Flag LargeAddressAware übersetzt und gelinkt werden, um das zusätzliche GByte nutzen zu können.

Probleme mit invreaseuserva können in Verbindung mit manchen Treibern auftreten, insbesondere bei Grafikkarten, die auf Onboard-RAM zurückgreifen, weil dort das eine GByte Kernelmode-Speicher nicht ausreicht.

Bei 64-Bit-Versionen von Windows benötigen Sie die beiden Schalter überhaupt nicht, da Windows automatisch sämtlichen Speicher sieht und Applikationen per Default vier GByte Usermode-Speicher erhält.

Data Execution Prevention

Vista unterstützt wie schon Windows XP ab SP2 und Windows Server 2003 ab SP1 mittels der Data Execution Prevention (DEP) den Schutz vor Buffer Overflows. Sie steuern DEP über das Schlüsselwort nx, das folgende Parameter annimmt:

alwayson: DEP ist für das Betriebssystem und alle Anwendungen eingeschaltet. Es lässt sich auch nicht über die Systemeigenschaften ausschalten.

optout: DEP ist komplett eingeschaltet, es lässt sich allerdings für einzelne Programme abschalten.

optin: DEP ist nur für Betriebssystem-Komponenten eingeschaltet, es lässt sich jedoch für einzelne Programme zusätzlich über das Application Compatibility Toolkit einschalten.

alwaysoff: DEP ist komplett abgeschaltet und lässt sich auch nicht selektiv für Programme einschalten. Hierbei wird unter Vista zusätzlich pae abgeschaltet. Um pae wieder zu ermöglichen, müssen Sie es per pae forceenable wieder einschalten. Unter Longhorn/Server 2008 hat alwaysoff keinen Einfluss auf pae.

Fazit

Die Möglichkeiten des Vista-Bootloader sind vielfältig, leider aber ungenügend von Microsoft dokumentiert. Einige Schalter sind im DDK (Device Driver Developer Kit) dokumentiert, andere finden eine - eher zufällige - Erwähnung in der Knowledgebase. Eine ausführliche Beschreibung aller Parameter, wie sie für die boot.ini noch auf der Website von Sysinternals existiert, ist derzeit nicht verfügbar.

Wir werden diesen Artikel weiter aktualisieren, wenn neue Informationen zu den Schaltern auftauchen. Zudem erweitern wir ihn um Tipps und Tricks für verschiedene Multiboot-Umgebungen und zeigen, wie Sie ein Vista WIM-Image von Festplatte booten.

Wenn Sie spezielle Fragen haben, oder eigene Ideen und Vorschläge für diesen Artikel einbringen wollen, schreiben Sie uns doch einfach. (mha)