Wie ändere ich den Speicherort der Ruhezustandsdatei in Windows 7?
45
Ich kann den Ruhezustand in Windows 7 nicht aktivieren, da auf meinem Laufwerk C: nicht genügend Speicherplatz vorhanden ist, um die Ruhezustandsdatei zu erstellen. Wie kann ich Windows veranlassen, die Datei woanders abzulegen?
Das kannst du nicht. Sie können jedoch den Ruhezustand ( powercfg.exe -h off) deaktivieren und die Datei anschließend löschen.
Ian Boyd
Antworten:
42
Dies ist nicht möglich, es muss sich im Stammverzeichnis des Startlaufwerks befinden (in Ihrem Fall im Laufwerk C:).
Raymond Chen erläuterte die Gründe dafür in diesem vertraulichen Windows-Artikel: The File System Paradox .
Der Winterschlaf folgt einem ähnlichen Muster. Wenn Sie das Betriebssystem in den Ruhezustand versetzen, wird der gesamte Speicherinhalt in die Ruhezustandsdatei geschrieben. Beim Wiederherstellen aus dem Ruhezustand wird die Datei zurück in den Speicher verschoben, und es wird so getan, als wäre nichts passiert. Wieder ist es ein anderes Hühnchen-und-Ei-Problem: Um die Ruhezustandsdatei zu laden, benötigen Sie den Dateisystemtreiber, aber der Dateisystemtreiber befindet sich in der Ruhezustandsdatei. Wenn Sie die Ruhezustandsdatei im Stammverzeichnis des Startlaufwerks behalten, kann stattdessen der Miniatur-Dateisystemtreiber verwendet werden.
Schade, dass Windows damit nicht umgehen kann, ich brauche es wirklich für meine SSD. Ich hoffe, dass sie das Problem in Zukunft beheben, damit Sie auswählen können, wo es unter Mac OS X
abgelegt werden soll.
5
Yah, meiner Meinung nach ist es ein Designfehler. Selbst wenn das System vom Hauptlaufwerk booten muss, gibt es keinen Grund, alle Gigabyte an Informationen auf demselben Laufwerk zu speichern - die Ruhezustandsdatei könnte die Grundlagen laden (z. B. Laufwerkszugriff) und dann auf ein anderes Laufwerk nach weiteren suchen Daten. Leider haben sie es nicht für diesen Fall entworfen - was bedeutet, dass sie es erst mit einem neuen Betriebssystem tun werden ... wenn überhaupt.
Namey
1
@Namey: Wenn die Ruhezustandsdatei die Grundlagen laden könnte, könnte sie auch direkt in den Bootloader geschrieben werden. Dann öffnet man eine ganze Dose Würmer. Zum anderen würde ich es auch nicht als Designfehler bezeichnen. Es wurde in den Tagen von Windows NT geschrieben, in denen Geschwindigkeit, Speicherbeschränkungen und geringe CPU-Leistung die großen Faktoren waren, nicht kleine SSD-Laufwerke. Heck, wer würde davon ausgehen, dass SSDs überhaupt so häufig sind?
Surfasb
1
Es sind nur hübsche Worte über "Hühnchen und Eier", die keine Rolle spielen: Wenn der Bootloader weiß, wie man Ruhezustandsdateien von der Festplatte in den Arbeitsspeicher lädt, gibt es keinen Grund, keinen Dateisystemtreiber im Bootloader zu haben.
Denis Barmenkov
3
Das ist eine blöde Ausrede für Microsoft. Was passiert, wenn sich beide Festplatten auf demselben Controller befinden und derselbe Treiber verwendet wird? Was ist, wenn eine Festplatte ssd ist und Sie sie nicht schnell tragen möchten?
NickSoft
6
Okay, es gibt 2 Dinge zu lösen, um hiberfil.sys zu bewegen
Sagen Sie 'ntoskrnl.exe', die als Prozess 'System' ausgeführt wird, um Ruhezustandsdaten in D: \ hiberfil.sys anstelle von C: \ -> noch ungelöst zu öffnen / speichern!
Diese Chance auch auf die Startkonfigurationsdatei (c: \ BOOT \ BCD) anzuwenden -> Dies ist mit Tools wie der VisualBCD https://www.boyans.net/DownloadVisualBCD.html relativ einfach
-> oder auch nur mit regedit Bearbeiten von HKLM \ BCD00000000 \ Objects {71575733-c376-11e4-80ea-806e6f6e6963} \ Elements \ 21000001, das das HiberFileDrive von ResumeLoader oder \ 22000002 HiberFilePath ist. Möglicherweise müssen Sie 'File / Load hive' c: \ BOOT \ BCD verwenden, um den Zweig 'BCD00000000' zu mounten (Cursor muss sich auf HKLM befinden, sonst ist der Menüpunkt ausgegraut)
-> wie es scheint, ist dies bereits erledigt Durch ntosknl.exe muss dies nicht geändert werden, da die Änderungen überschrieben werden.
Nummer 1 ist jedoch die schlechtere und schwerer zu ändernde Sache. Hmm, lass uns ntoskrnl.exe in IDA laden und die Funktion finden, die sich mit /hiberfil.sys befasst, und dekompilieren, um zu sehen, was genau dort vor sich geht ...
Okay, kurz gesagt, der Pfad ist wie folgt fest codiert :
IoArcBootDeviceName + "\ hiberfil.sys"
Ohne ein böses binäres Patching gibt es keine Möglichkeit, dies zu ändern. Naja, neben dem Berühren des Holy Windows Grail Patches kann das "ntoskernel" zu Problemen führen, wie zum Beispiel das Rückgängigmachen des Patches oder das Verrücktwerden von Antivirenprogrammen.
Wow, das scheint in Ordnung zu sein (nur IopLoadCrashdumpDriver System32 \ Drivers \ crashdmp.sys geht ein bisschen runter, aber wer Crashdump braucht - ist egal, ob wir dort etwas kaputt machen)
So Patchen IopCreateArcNames , die schafft ArcBootDeviceName fein sein wird:
NTSTATUS INIT_FUNCTION NTAPI IopCreateArcNames ( IN PLOADER_PARAMETER_BLOCK LoaderBlock )
...
/* Create the global system partition name */
63 sprintf(Buffer, "\\ArcName\\%s", LoaderBlock->ArcBootDeviceName);
64 RtlInitAnsiString(&ArcString, Buffer);
65 RtlAnsiStringToUnicodeString(&IoArcBootDeviceName, &ArcString, TRUE);
66
67 /* Allocate memory for the string */
68 Length = strlen(LoaderBlock->ArcBootDeviceName) + sizeof(ANSI_NULL);
69 IoLoaderArcBootDeviceName = ExAllocatePoolWithTag(PagedPool,
70 Length,
71 TAG_IO);
72 if (IoLoaderArcBootDeviceName)
73 {
74 /* Copy the name */
75 RtlCopyMemory(IoLoaderArcBootDeviceName,
76 LoaderBlock->ArcBootDeviceName,
77 Length);
78 }
...
https://doxygen.reactos.org/d3/d82/ntoskrnl_2io_2iomgr_2arcname_8c.html Übrigens Ich verwende ntkrnlmp.exe 6.1.7601.19045 von Win7 64 Bit und überprüfte diesen Code gegen ReactOS. (Der Ruhezustand ist jedoch noch nicht in den Reactos-Quellen implementiert.)
Beachten Sie, dass ArcBootDeviceName etwa wie folgt lautet: \ Device \ Harddisk1 \ Partition0
Hmm lass uns ArcBootDeviceName (LoaderBlock + 0x78) auf ArcHalDeviceName (LoaderBlock + 0x80) patchen
Falls sich der Bootmgr-Loader auf einer anderen Partition befindet als Windows, wird hoffentlich hibernate.sys dort erstellt, wo bootmgr ist.
powercfg.exe -h off
) deaktivieren und die Datei anschließend löschen.Antworten:
Dies ist nicht möglich, es muss sich im Stammverzeichnis des Startlaufwerks befinden (in Ihrem Fall im Laufwerk C:).
Raymond Chen erläuterte die Gründe dafür in diesem vertraulichen Windows-Artikel: The File System Paradox .
quelle
Okay, es gibt 2 Dinge zu lösen, um hiberfil.sys zu bewegen
Sagen Sie 'ntoskrnl.exe', die als Prozess 'System' ausgeführt wird, um Ruhezustandsdaten in D: \ hiberfil.sys anstelle von C: \ -> noch ungelöst zu öffnen / speichern!
Diese Chance auch auf die Startkonfigurationsdatei (c: \ BOOT \ BCD) anzuwenden -> Dies ist mit Tools wie der VisualBCD https://www.boyans.net/DownloadVisualBCD.html relativ einfach -> oder auch nur mit regedit Bearbeiten von HKLM \ BCD00000000 \ Objects {71575733-c376-11e4-80ea-806e6f6e6963} \ Elements \ 21000001, das das HiberFileDrive von ResumeLoader oder \ 22000002 HiberFilePath ist. Möglicherweise müssen Sie 'File / Load hive' c: \ BOOT \ BCD verwenden, um den Zweig 'BCD00000000' zu mounten (Cursor muss sich auf HKLM befinden, sonst ist der Menüpunkt ausgegraut) -> wie es scheint, ist dies bereits erledigt Durch ntosknl.exe muss dies nicht geändert werden, da die Änderungen überschrieben werden.
Nummer 1 ist jedoch die schlechtere und schwerer zu ändernde Sache. Hmm, lass uns ntoskrnl.exe in IDA laden und die Funktion finden, die sich mit /hiberfil.sys befasst, und dekompilieren, um zu sehen, was genau dort vor sich geht ...
Okay, kurz gesagt, der Pfad ist wie folgt fest codiert : IoArcBootDeviceName + "\ hiberfil.sys" Ohne ein böses binäres Patching gibt es keine Möglichkeit, dies zu ändern. Naja, neben dem Berühren des Holy Windows Grail Patches kann das "ntoskernel" zu Problemen führen, wie zum Beispiel das Rückgängigmachen des Patches oder das Verrücktwerden von Antivirenprogrammen.
IopLoadCrashdumpDriver PopDeleteHiberFile PopCreateHiberFile PopBcdSetupResumeObject PopBcdSetDefaultResumeObjectElements PopBcdSetPendingResume PopBcdRegenerateResumeObject PopBcdEstablishResumeObjectObject PopResumeObject
Wow, das scheint in Ordnung zu sein (nur IopLoadCrashdumpDriver System32 \ Drivers \ crashdmp.sys geht ein bisschen runter, aber wer Crashdump braucht - ist egal, ob wir dort etwas kaputt machen)
So Patchen IopCreateArcNames , die schafft ArcBootDeviceName fein sein wird:
https://doxygen.reactos.org/d3/d82/ntoskrnl_2io_2iomgr_2arcname_8c.html Übrigens Ich verwende ntkrnlmp.exe 6.1.7601.19045 von Win7 64 Bit und überprüfte diesen Code gegen ReactOS. (Der Ruhezustand ist jedoch noch nicht in den Reactos-Quellen implementiert.) Beachten Sie, dass ArcBootDeviceName etwa wie folgt lautet: \ Device \ Harddisk1 \ Partition0
Hmm lass uns ArcBootDeviceName (LoaderBlock + 0x78) auf ArcHalDeviceName (LoaderBlock + 0x80) patchen
Falls sich der Bootmgr-Loader auf einer anderen Partition befindet als Windows, wird hoffentlich hibernate.sys dort erstellt, wo bootmgr ist.
Ersetzen Sie daher in ntoskrnl.exe 4C8B4B78 an zwei Stellen durch 4C8B4B80. Vergessen Sie nicht, die PE-Checksumme nachträglich zu reparieren.
quelle