Ich muss eine Methode finden, um programmatisch festzustellen, welches Laufwerk Windows zum Booten verwendet. Mit anderen Worten, ich brauche einen Weg von Windows, um festzustellen, welches Laufwerk das BIOS benutzt, um das ganze System zu booten.
Gibt Windows eine Schnittstelle frei, um dies zu entdecken? Mit wie groß das Windows API ist, hoffe ich, dass dort etwas begraben ist, das den Trick tun könnte.
Terry
ps. Nur die ersten Sektoren der Festplatte zu lesen, bringt nichts. Auf meiner Dev-Box habe ich zwei Festplatten, und wenn ich mir die Inhalte der ersten paar Sektoren auf einer der Festplatten anschaue, habe ich einen Standard-Boiler-Platten-MBR.
Bearbeiten, um einige Dinge zu klären. Die Art, wie ich das Gerät identifizieren möchte, besteht aus einer Zeichenfolge, die ein physisches Laufwerk (im Gegensatz zu einem logischen Laufwerk) identifiziert. Physische Laufwerke haben die Form "\\. \ PHYSICALDRIVEx", wobei x für eine Zahl steht. Auf der anderen Seite wird ein logisches Laufwerk durch eine Zeichenkette der Form "\\. \ X" identifiziert, wobei x ein Laufwerksbuchstabe ist.
Bearbeiten, um ein paar der Ideen zu diskutieren, die rausgeworfen wurden. Zu wissen, welches logische Volume Windows zum Booten verwendet, hilft mir hier nicht weiter. Hier ist der Grund. Angenommen, C: verwendet ein gespiegeltes RAID-Setup. Das bedeutet, dass wir mindestens zwei physische Laufwerke haben. Jetzt bekomme ich die Zuordnung von Logical Drive zu Physical Drive und ich stelle fest, dass es zwei physische Laufwerke gibt, die von diesem Volume verwendet werden. Welche hat Windows zum Booten verwendet? Dies setzt natürlich voraus, dass das zum Starten verwendete physische Laufwerk Windows dasselbe physische Laufwerk ist, das den MBR enthält.
Das hängt von Ihrer Definition ab, welches Laufwerk Windows zum Booten verwendet hat. Ich kann mir 3 verschiedene Antworten auf ein Standard-BIOS-System vorstellen (wer weiß, was ein EFI-System macht):
2 und 3 sollten leicht zu finden sein - ich bin nicht so sicher über 1. Obwohl Sie Raw Disk lesen können, um einen MBR zu finden, bedeutet das nicht, dass es das BIOS-Boot-Gerät dieses Mal oder sogar das nächste Mal ist könnte mehrere Festplatten mit MBRs haben).
Sie können wirklich nicht einmal sicher sein, dass der PC von einer Festplatte gestartet wurde - es ist durchaus möglich, Windows von einer Diskette zu booten. In diesem Fall wären sowohl 1 als auch 2 technisch gesehen eine Diskette, obwohl 3 C: \ Windows bleiben würde.
Sie müssen vielleicht etwas genauer in Ihren Anforderungen oder Zielen sein.
Sie können WMI verwenden, um dies herauszufinden. Die Klasse Win32_BootConfiguration informiert Sie sowohl über das logische Laufwerk als auch über das physische Gerät, von dem Windows gestartet wird. Insbesondere wird Ihnen die Caption-Eigenschaft mitteilen, von welchem Gerät Sie booten.
Geben Sie beispielsweise in Powershell einfach gwmi Win32_BootConfiguration ein, um Ihre Antwort zu erhalten.
Es gibt keine boot.ini auf einem Rechner, auf dem nur Vista installiert ist.
Wie möchten Sie das Laufwerk / die Partition identifizieren: durch den Windows-Laufwerksbuchstaben wird es zugeordnet (z. B. c: \, d :) oder anhand seiner Hardware-Signatur (welcher Bus usw.).
Für den einfachen Fall sehen Sie sich GetSystemDirectory
anVersuchen Sie HKEY_LOCAL_MACHINE \ SYSTEM \ Setup \ SystemPartition
Sie können versuchen, eine einfache Befehlszeile zu verwenden. bcdedit ist was Sie brauchen, führen Sie einfach cmd als Administrator und Geben Sie bcdedit
oder bcdedit \v
ein, dies funktioniert nicht unter XP, aber ich hoffe, es ist kein Problem.
Wie auch immer für XP können Sie in boot.ini
file schauen.