Share via


Srdelayed.exe

オペレーティング システムの起動初期にシステム状態の復元操作を実行するアプリケーションは、ファイル管理機能を使用して、特定のシステム ファイルの移動、削除、または短縮名を設定できない場合があります。 Srlayed.exe は、Windows Server 2008 の Windows Server バックアップ (WSB) 機能で提供される実行可能ファイルで、システム状態回復アプリケーションがシステム ファイルの移動、削除、短縮名を設定できるようにします。

Srlayed ツールは、システム状態回復アプリケーションを目的としています。ファイル管理機能に代わるものではありません。 このツールは、MoveFileEx 関数、DeleteFile 関数、およびSetFileShortName 関数を使用して、アプリケーションがシステム ファイルの短い名前を移動、削除、または設定できない場合にのみ使用してください。 システム状態の復元と再起動中に、Srlayed.exe はシステムの復元と wbadmin.exe コマンド ライン ツールによって使用され、特定のシステム ファイルの移動、削除、および短縮名の設定が行われます。 したがって、Srlayed は、独自のシステム状態回復アプリケーションでこれらのシステム ファイルを復元する機能を必要とする開発者にとって役立つ可能性があります。

Srdelayed は次の操作を実行できます。

  • MOVEFILE_DELAY_UNTIL_REBOOT フラグを持つ MoveFileEx 関数に似た移動ファイル操作
  • DeleteFile 関数に似たファイルの削除操作
  • SetFileShortName 関数に似た短い名前の設定操作

Srlayed を使用するには、アプリケーションには、Srlayed.exe ファイルの場所へのフル パスと、要求されているすべてのファイル管理操作をツールが実行するために必要な情報を含むように作成した Unicode テキスト ファイルへのフル パスが必要です。 アプリケーションは、このテキスト ファイルに操作に対する冗長なリクエストが含まれていないこと、およびファイル管理操作の必要な順序を処理することを保証する責任があります。 たとえば、フォルダーを削除するには空にする必要があるため、アプリケーションでは、フォルダーの削除を要求する前に、テキスト ファイルでフォルダー内のすべてのファイルの削除が指定されていることを確認する必要があります。

SetupExecute エントリがまだレジストリに存在しない場合、アプリケーションでは、HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager レジストリ キーに SetupExecute という名前の REG_MULTI_SZ タイプ エントリを作成する必要があります。

アプリケーションでは、次の形式を使用して、SetupExecute 値を、Srdelayed.exe ファイルの場所への完全パスと、テキスト ファイルの場所への完全なパスに設定する必要があります。 次のように、テキスト ファイルのパスにプレフィックス「\\??\」を付けます。

Srdelayed.exe への完全なパス \\??\テキスト ファイルへの完全なパス

たとえば、SetupExecute の次の値は、Srdelayed.exeが System32 フォルダーにあり、テキスト ファイルの名前が DelayedOperations であることを示します。

C:\Windows\System32\srdelayed.exe \\??\C:\temp\DelayedOperations

パスと名前のスペースは、16 進数でエンコードする必要があります。 たとえば、Program Files の場合、パスを「\\??\C:Program%20Files\a.dll」としてエンコードします。

再起動時にレジストリまたはシステムを復元する場合、アプリケーションは SetupExecute が正しいレジストリ ハイブで書き込まれるようにする必要があります。 レジストリの回復は、Srlayed.exe を実行する前に実行されます。 これは読み取られたバージョンであるため、アプリケーションは、回復されたバージョンのレジストリに SetupExecute を書き込む必要があります。

Srdelayed 入力ファイルの形式

Srlayed がファイル管理操作を実行するために必要なすべての情報は、Unicode テキスト ファイル内の Unicode 文字の文字列として指定されます。 Unicode 文字の文字列はレコードに分割され、各レコード自体が 4 つのフィールドに分割されます。 各レコードは、単一の移動ファイル、ファイルの削除、または短い名前の操作の設定を指定します。 各レコードの 4 つのフィールドには、操作のパラメーターが含まれています。 Srdelayed.exeは、文字列内でレコードが出現する順序で各操作を実行します。 アプリケーションでは、このファイル内の重複レコードをチェックし、重複を削除する必要があります。

次の文字列は、2 つの操作を要求し、2 つのレコードで構成されるファイルの形式を示しています。 各パラメーター フィールドは、1 つの L'\0' 文字で終わります。 レコードは、連続する 4 つのフィールドで構成されます。 すべてのレコードの末尾に、追加の 1 文字の L'\0' が追加されます。

<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------------------------|

1 番目、2 番目、3 番目、および 4 番目のパラメーター フィールドの意味は、レコードが移動、削除、短縮名の設定のいずれの操作を記述しているかによって異なります。

ファイルの移動レコードの書式

フィールド 1 は、ファイルを移動する要求としてこれを識別します。 このフィールドの値は常に L"MoveFile" であり、大文字と小文字が区別されます。

フィールド 2 は、ファイルのソースの場所を指定します。 Srdelayed の移動ファイル操作では、フォルダーの移動はサポートされていません。 このフィールドには、ファイルを指定する必要があります。 このフィールドの値は、パスにプレフィックスとして「\\?\」を使用するグローバル一意識別子 (GUID) が含まれていない限り、「\\??\」に追加されたファイルの完全なパスになります。 「\\??\」を追加する前に、「\\?\」を削除します。

フィールド 3 は、ファイルの宛先を指定します。 ファイルの移動操作は、ボリューム内でのみ機能します。 ソースと宛先は同じボリューム上にある必要があります。 このフィールドの値は、パスにプレフィックスとして「\\?\」を使用するグローバル一意識別子 (GUID) が含まれていない限り、「\\??\」に追加されたファイルの完全なパスになります。 「\\??\」を追加する前に、「\\?\」を削除します。

フィールド 4 は、Srdelayed から状態情報を受け取ります。 新しいレコードの場合、このフィールドの値は L"NotExecuted" に設定する必要があります。

次の例では、ドライブ パスでファイルを参照します。 ソースのパスと名前が C:\Stage\a.dll の場合、このレコードは Srdelayed がそれを C:\temp\a.dll に移動することを要求します。

MoveFile \\??\C:\Stage\a.dll \\??\C:\temp\a.dll NotExecuted

次の例では、ボリューム GUID パスでファイルを参照します。 ソースのパスと名前が \\?\ Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\Stage\a.dll の場合、このレコードは Srlayed にそれを \\?\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

ファイル レコードの削除の書式

フィールド 1 は、ファイルを削除する要求としてこれを識別します。 このフィールドの値は常に L"DeleteFile" であり、大文字と小文字が区別されます。

フィールド 2 は未使用です。 このフィールドの値は L"Unused" に設定する必要があります。

フィールド 3 は、削除するファイルを指定します。 削除するには、フォルダーを空にする必要があります。 フォルダーを削除する前に、ファイルの削除操作を使用してフォルダー内のすべてのファイルを削除します。 このフィールドの値は、パスにプレフィックスとして「\\?\」を使用するグローバル一意識別子 (GUID) が含まれていない限り、「\\??\」に追加されたファイルの完全なパスになります。 「\\??\」を追加する前に、「\\?\」を削除します。

フィールド 4 は、Srdelayed から状態情報を受け取ります。 新しいレコードの場合、このフィールドの値は L"NotExecuted" に設定する必要があります。

次の例では、ドライブ パスでファイルを参照します。 パスと名前が C:\temp\b.dll の場合、このレコードは Srdelayed がファイルを削除することを要求します。

DeleteFile Unused \\??\C:\temp\b.dll NotExecuted

次の例では、ボリューム GUID でファイルを参照します。 パスと名前が \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\b.dll の場合、このレコードは Srdelayed がファイルを削除することを要求します。

DeleteFile Unused \\??\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\b.dll\ NotExecuted

短い名前のレコードを設定する形式

フィールド 1 は、ファイルの短い名前を設定する要求としてこれを識別します。 このフィールドの値は常に L"SetFileShortName" であり、大文字と小文字が区別されます。

フィールド 2 は短い名前を指定します。

フィールド 3 フィールドは、短い名前を受け取るパスと長い名前を指定します。 このフィールドの値は、パスにプレフィックスとして「\\?\」を使用するグローバル一意識別子 (GUID) が含まれていない限り、「\\??\」に追加されたファイルのパスと長い名前になります。 「\\??\」を追加する前に、「\\?\」を削除します。

フィールド 4 は、Srdelayed から状態情報を受け取ります。 新しいレコードの場合、このフィールドの値は L"NotExecuted" に設定する必要があります。

次の例では、ドライブ パスでファイルを参照します。 ファイルのパスと名前が C:\temp\ShortFileName.dll の場合、このレコードはファイルに ShortN~1.dll という短い名前を付けるように要求します。

SetFileShortName ShortN~1.dll \\??\C:\temp\ShortFileName.dll NotExecuted

次の例では、ボリューム GUID でファイルを参照します。 ファイルのパスと名前が \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\ShortFileName.dll\ の場合、このレコードはファイルに ShortN~1.dll という短い名前を付けるように要求します。

SetFileShortName ShortN~1.dll \\??\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\ShortFileName.dll\ NotExecuted

Srdelayed 操作の状態

Srdelayed は、テキスト ファイルの各レコードの 4 番目のフィールドに文字列 L"SC=xxxxxxx" を書き込みます。xxxxxxx は、要求された操作の状態を示す 16 進数です。 値 0 は、操作が成功したことを示します。

Srdelayed は、復元操作全体の結果をログに記録するために、HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion の下に SystemRestore という名前のレジストリ キーを作成します。 Srlayed が要求されたすべての操作を正常に実行すると、名前 RestoreStatusResult がこのキーの下に値 0 で書き込まれます。 Srlayed が要求された操作をいずれも実行できない場合、名前 RestoreStatusResult および RestoreStatusDetails がゼロ以外の値でこのキーの下に書き込まれます。 Srlayed が要求された操作を実行できない場合にのみ、名前 RestoreStatusDetails がこのキーの下に書き込まれます。 ファイルの短縮名を設定する操作が失敗した場合、Srlayed は次の操作に進みます。 Srlayed は、ファイルの移動操作とファイル削除操作が重要であるとみなし、移動操作または削除操作が失敗した場合は続行しません。