Srdelayed.exe
Anwendungen, die Systemzustandswiederherstellungen zu einem frühen Zeitpunkt beim Starten des Betriebssystems ausführen, können die Dateiverwaltungsfunktionen möglicherweise nicht verwenden, um bestimmte Systemdateien zu verschieben, zu löschen oder den Kurznamen festzulegen. Srdelayed.exe ist eine ausführbare Datei, die mit dem Windows Server Backup-Feature (WSB) in Windows Server 2008 bereitgestellt wird, mit der Anwendungen für die Systemzustandswiederherstellung den Kurznamen von Systemdateien verschieben, löschen und festlegen können.
Das Srdelayed-Tool ist für Anwendungen zur Wiederherstellung des Systemzustands vorgesehen. Die Dateiverwaltungsfunktionen werden nicht ersetzt. Dieses Tool sollte nur verwendet werden, wenn die Anwendung nicht in der Lage ist, den Kurznamen einer Systemdatei mithilfe der Funktionen MoveFileEx, DeleteFile und SetFileShortName zu verschieben, zu löschen oder festzulegen. Während einer Systemzustandswiederherstellung und -neustart wird Srdelayed.exe von der Systemwiederherstellung und dem wbadmin.exe Befehlszeilentool verwendet, um den Kurznamen für bestimmte Systemdateien zu verschieben, zu löschen und festzulegen. Srdelayed kann daher für Entwickler nützlich sein, die die Fähigkeit benötigen, diese Systemdateien in ihren eigenen Systemzustandswiederherstellungsanwendungen wiederherzustellen.
Srdelayed kann die folgenden Vorgänge ausführen:
- Ein Dateiverschiebungsvorgang ähnlich der MoveFileEx-Funktion mit dem MOVEFILE_DELAY_UNTIL_REBOOT-Flag
- Ein Dateilöschvorgang ähnlich der DeleteFile-Funktion
- Ein Set-Short-Name-Vorgang ähnlich der SetFileShortName-Funktion
Um Srdelayed verwenden zu können, benötigt Ihre Anwendung den vollständigen Pfad zum Speicherort der Srdelayed.exe-Datei und den vollständigen Pfad zu einer Unicode-Textdatei, die Sie erstellt haben, um die Informationen zu enthalten, die das Tool zum Ausführen aller angeforderten Dateiverwaltungsvorgänge benötigt. Ihre Anwendung ist dafür verantwortlich, sicherzustellen, dass diese Textdatei keine redundanten Anforderungen für einen Vorgang enthält und alle erforderlichen Reihenfolgen der Dateiverwaltungsvorgänge verarbeitet. Da beispielsweise ein Ordner leer sein muss, um gelöscht zu werden, muss Ihre Anwendung sicherstellen, dass die Textdatei das Entfernen aller Dateien innerhalb des Ordners angibt, bevor der Ordner gelöscht werden kann.
Wenn der Eintrag SetupExecute noch nicht in der Registrierung vorhanden ist, muss Ihre Anwendung einen REG_MULTI_SZ Typeintrag namens SetupExecute unter dem folgenden Registrierungsschlüssel erstellen: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager.
Ihre Anwendung sollte das folgende Format verwenden, um den Wert von SetupExecute auf den vollständigen Pfad zum Speicherort der Srdelayed.exe-Datei und den vollständigen Pfad zum Speicherort der Textdatei festzulegen. Präfix "\\?? \" wie folgt zum Pfad der Textdatei:
Vollständiger Pfad zu Srdelayed.exe \\?? \Vollständiger Pfad zur Textdatei
Der folgende Wert für SetupExecute gibt beispielsweise an, dass sich die Srdelayed.exe im Ordner System32 und die Textdatei mit dem Namen DelayedOperations befindet:
C:\Windows\System32\srdelayed.exe \\?? \C:\temp\DelayedOperations
Leerzeichen in Pfad und Name sollten hexadezimal codiert sein. Codieren Sie beispielsweise für Programme den Pfad als "\\?? \C:Program%20Files\a.dll".
Wenn die Registrierung oder das System beim Neustart wiederhergestellt wird, muss Ihre Anwendung sicherstellen, dass SetupExecute in der richtigen Registrierungsstruktur geschrieben wird. Die Wiederherstellung der Registrierung erfolgt, bevor Srdelayed.exe ausgeführt wird. Die Anwendung muss SetupExecute in die wiederhergestellte Version der Registrierung schreiben, da dies die gelesene Version ist.
Format für die Srdelayed-Eingabedatei
Alle Informationen, die Srdelayed zum Ausführen von Dateiverwaltungsvorgängen benötigt, werden als Zeichenfolge von Unicode-Zeichen in einer Unicode-Textdatei angegeben. Die Zeichenfolge der Unicode-Zeichen wird in Datensätze partitioniert, die jeweils in vier Felder partitioniert sind. Jeder Datensatz gibt einen einzelnen Vorgang zum Verschieben einer Datei, zum Löschen einer Datei oder zum Festlegen eines Kurznamens an. Die vier Felder jedes Datensatzes enthalten die Parameter für den Vorgang. Srdelayed.exe führt jeden Vorgang in der Reihenfolge aus, in der die Datensätze in der Zeichenfolge auftreten. Ihre Anwendung sollte in dieser Datei nach doppelten Datensätzen suchen und die Duplikate entfernen.
Die folgende Zeichenfolge veranschaulicht das Format für eine Datei, die zwei Vorgänge anfordert und aus zwei Datensätzen besteht. Jedes Parameterfeld endet mit einem einzelnen L'\0'-Zeichen. Ein Datensatz besteht aus vier aufeinanderfolgenden Feldern. Am Ende aller Datensätze wird ein zusätzliches einzelnes L'\0'-Zeichen angefügt.
<ParamA1>L'\0'<ParamA2>L'\0'<ParamA3>L'\0'<ParamA4>L'\0'<ParamB1>L'\0'<ParamB2>L'\0'<ParamB3>L'\0'<ParamB4>L'\0'L'\0'
|-----------------------RecordA------------------------|------------------------RecordB------------------------|
Die Bedeutung des ersten, zweiten, dritten und vierten Parameterfelds hängt davon ab, ob der Datensatz einen Vorgang zum Verschieben, Löschen oder Festlegen eines Kurznamens beschreibt.
Format für einen Dateidatensatz verschieben
Feld 1 identifiziert dies als Anforderung zum Verschieben einer Datei. Der Wert in diesem Feld ist immer L"MoveFile", und die Groß-/Kleinschreibung wird beachtet.
Feld 2 gibt den Quellspeicherort der Datei an. Der Srdelayed-Vorgang zum Verschieben von Dateien unterstützt das Verschieben eines Ordners nicht. In diesem Feld muss eine Datei angegeben werden. Der Wert für dieses Feld ist der vollständige Pfad der Datei, die an "\\?? \" es sei denn, der Pfad enthält eine GUID (Globally Unique Identifier), die "\\?\" als Präfix verwendet. Entfernen Sie "\\?\", bevor Sie an "\\?? \".
Feld 3 gibt das Ziel der Datei an. Der Dateiverschiebungsvorgang funktioniert nur innerhalb eines Volumes. Quelle und Ziel müssen sich auf demselben Volume befinden. Der Wert für dieses Feld ist der vollständige Pfad der Datei, die an "\\?? \" es sei denn, der Pfad enthält eine GUID (Globally Unique Identifier), die "\\?\" als Präfix verwendet. Entfernen Sie "\\?\", bevor Sie an "\\?? \".
Feld 4 empfängt status Informationen von Srdelayed. Der Wert in diesem Feld sollte für einen neuen Datensatz auf L"NotExecuted" festgelegt werden.
Im folgenden Beispiel wird auf die Datei anhand des Laufwerkpfads verwiesen. Wenn der Pfad und Name der Quelle C:\Stage\a.dll ist, fordert dieser Datensatz an, dass Srdelayed ihn in C:\temp\a.dll verschieben soll.
Movefile\\?? \C:\Stage\a.dll \\?? \C:\temp\a.dll NotExecuted
Im folgenden Beispiel wird auf die Datei anhand des Volume-GUID-Pfads verwiesen. Wenn pfad und Name der Quelle \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6e6963}\Stage\a.dll, Dieser Datensatz fordert an, dass Srdelayed ihn nach \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\a.dll
Movefile\\?? \Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\Stage\a.dll \\?? \Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\a.dll NotExecuted
Format für einen Dateidatensatz löschen
Feld 1 identifiziert dies als Anforderung zum Löschen einer Datei. Der Wert in diesem Feld ist immer L"DeleteFile", und die Groß-/Kleinschreibung wird beachtet.
Feld 2 wird nicht verwendet. Der Wert in diesem Feld sollte auf L"Nicht verwendet" festgelegt werden.
Feld 3 gibt die zu entfernende Datei an. Ein Ordner muss leer sein, um entfernt zu werden. Verwenden Sie Dateilöschvorgänge, um alle Dateien im Ordner zu entfernen, bevor Sie den Ordner entfernen. Der Wert für dieses Feld ist der vollständige Pfad der Datei, die an "\\?? \" es sei denn, der Pfad enthält eine GUID (Globally Unique Identifier), die "\\?\" als Präfix verwendet. Entfernen Sie "\\?\", bevor Sie an "\\?? \".
Feld 4 empfängt status Informationen von Srdelayed. Der Wert in diesem Feld sollte für einen neuen Datensatz auf L"NotExecuted" festgelegt werden.
Im folgenden Beispiel wird auf die Datei anhand des Laufwerkpfads verwiesen. Wenn Pfad und Name C:\temp\b.dll sind, fordert dieser Datensatz an, dass Srdelayed die Datei löschen soll.
DeleteFile Nicht verwendet \\?? \C:\temp\b.dll NotExecuted
Im folgenden Beispiel wird anhand der Volume-GUID auf die Datei verwiesen. Wenn Pfad und Name \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\b.dll lautet, fordert dieser Datensatz von Srdelayed das Entfernen der Datei an.
DeleteFile Nicht verwendet \\?? \Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\b.dll\ NotExecuted
Format für Set Short-Name Record
Feld 1 identifiziert dies als Anforderung zum Festlegen des Kurznamens einer Datei. Der Wert in diesem Feld ist immer L"SetFileShortName" und beachtet groß-/klein.
Feld 2 gibt den Kurznamen an.
Feld 3 gibt den Pfad und den langen Namen an, um den Kurznamen zu erhalten. Der Wert für dieses Feld ist der Pfad und der lange Name der Datei, die an "\\?? \" es sei denn, der Pfad enthält eine GUID (Globally Unique Identifier), die "\\?\" als Präfix verwendet. Entfernen Sie "\\?\", bevor Sie an "\\?? \".
Feld 4 empfängt status Informationen von Srdelayed. Der Wert in diesem Feld sollte für einen neuen Datensatz auf L"NotExecuted" festgelegt werden.
Im folgenden Beispiel wird auf die Datei anhand des Laufwerkpfads verwiesen. Wenn der Pfad und Name der Datei C:\temp\ShortFileName.dll ist, fordert dieser Datensatz an, dass die Datei einen Kurznamen (ShortN~1.dll) erhält.
SetFileShortName ShortN~1.dll \\?? \C:\temp\ShortFileName.dll NotExecuted
Im folgenden Beispiel wird anhand der Volume-GUID auf die Datei verwiesen. Wenn pfad und Name der Datei \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6e6963}\temp\ShortFileName.dll\ lautet, fordert dieser Datensatz an, dass die Datei einen Kurznamen, ShortN~1.dll, erhält.
SetFileShortName ShortN~1.dll \\?? \Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\ShortFileName.dll\ NotExecuted
Srdelayed Operations Status
Srdelayed schreibt die Zeichenfolge L"SC=xxxxxxx" in das vierte Feld jedes Datensatzes der Textdatei, wobei xxxxxxx ein Hexadezimal ist, das die status des angeforderten Vorgangs angibt. Der Wert 0 (null) gibt an, dass der Vorgang erfolgreich war.
Srdelayed erstellt einen Registrierungsschlüssel namens SystemRestore unter HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion , um das Ergebnis des gesamten Wiederherstellungsvorgangs zu protokollieren. Wenn Srdelayed alle angeforderten Vorgänge erfolgreich ausführt, wird unter diesem Schlüssel der Name RestoreStatusResult mit einem Nullwert geschrieben. Wenn Srdelayed keine der angeforderten Vorgänge ausführen kann, werden die Namen RestoreStatusResult und RestoreStatusDetails unter diesem Schlüssel mit Werten ungleich null geschrieben. Der Name RestoreStatusDetails wird nur unter diesem Schlüssel geschrieben, wenn Srdelayed keine angeforderten Vorgänge ausführen kann. Wenn ein Vorgang zum Festlegen des Kurznamens einer Datei nicht erfolgreich ist, fährt Srdelayed mit dem nächsten Vorgang fort. Srdelayed betrachtet die Vorgänge zum Verschieben von Dateien und Löschdateien als kritisch und wird nicht fortgesetzt, wenn ein Verschiebungs- oder Löschvorgang nicht erfolgreich ist.