Srdelayed.exe

운영 체제 시작 초기에 시스템 상태 복원 작업을 수행하는 애플리케이션은 파일 관리 기능을 사용하여 특정 시스템 파일의 짧은 이름을 이동, 삭제 또는 설정할 수 없습니다. Srdelayed.exe 시스템 상태 복구 애플리케이션이 시스템 파일의 짧은 이름을 이동, 삭제 및 설정할 수 있도록 하는 Windows Server 2008의 WSB(Windows Server Backup) 기능과 함께 제공되는 실행 파일입니다.

Srdelayed 도구는 시스템 상태 복구 애플리케이션을 위한 것입니다. 파일 관리 함수를 대체하지 않습니다. 이 도구는 애플리케이션이 MoveFileEx, DeleteFile 및 SetFileShortName 함수를 사용하여 시스템 파일의 짧은 이름을 이동, 삭제 또는 설정할 수 없는 경우에만 사용해야 합니다. 시스템 상태 복원 및 다시 시작하는 동안 시스템 복원 및 wbadmin.exe 명령줄 도구에서 Srdelayed.exe 사용하여 특정 시스템 파일에서 짧은 이름을 이동, 삭제 및 설정합니다. 따라서 Srdelayed는 자체 시스템 상태 복구 애플리케이션에서 이러한 시스템 파일을 복원하는 기능이 필요한 개발자에게 유용할 수 있습니다.

Srdelayed는 다음 작업을 수행할 수 있습니다.

  • MOVEFILE_DELAY_UNTIL_REBOOT 플래그가 있는 MoveFileEx 함수와 유사한 파일 이동 작업
  • DeleteFile 함수와 유사한 파일 삭제 작업
  • SetFileShortName 함수와 유사한 짧은 이름 설정 작업

Srdelayed를 사용하려면 애플리케이션에 Srdelayed.exe 파일의 위치에 대한 전체 경로와 도구가 요청하는 모든 파일 관리 작업을 수행하는 데 필요한 정보를 포함하도록 작성한 유니코드 텍스트 파일의 전체 경로가 필요합니다. 애플리케이션은 이 텍스트 파일에 작업에 대한 중복 요청이 포함되지 않고 파일 관리 작업의 필요한 순서를 처리하는지 확인해야 합니다. 예를 들어 폴더를 삭제하려면 폴더가 비어 있어야 하므로 애플리케이션은 폴더 삭제를 요청하기 전에 텍스트 파일이 폴더 내의 모든 파일을 제거하도록 지정해야 합니다.

SetupExecute 항목이 레지스트리에 아직 없는 경우 애플리케이션은 레지스트리 키인 HKEY_LOCAL_MACHINESystem\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진수로 인코딩되어야 합니다. 예를 들어 프로그램 파일의 경우 경로를 "\\??로 인코딩합니다. \C:Program%20Files\a.dll".

다시 시작 시 레지스트리 또는 시스템이 복원되는 경우 애플리케이션은 SetupExecute 가 올바른 레지스트리 하이브에 기록되도록 해야 합니다. 레지스트리 복구는 Srdelayed.exe 실행되기 전에 수행됩니다. 애플리케이션은 읽은 버전이므로 복구된 레지스트리 버전에 SetupExecute 를 작성해야 합니다.

Srdelayed 입력 파일의 형식

Srdelayed가 파일 관리 작업을 수행하는 데 필요한 모든 정보는 유니코드 텍스트 파일에서 유니코드 문자 문자열로 지정됩니다. 유니코드 문자의 문자열은 각각 4개의 필드로 분할된 레코드로 분할됩니다. 각 레코드는 단일 이동 파일, 삭제 파일 또는 짧은 이름 설정 작업을 지정합니다. 각 레코드의 4개 필드에는 작업에 대한 매개 변수가 포함됩니다. Srdelayed.exe 문자열에서 레코드가 발생하는 순서대로 각 작업을 수행합니다. 애플리케이션은 이 파일의 중복 레코드를 검사 중복된 레코드를 제거해야 합니다.

다음 문자열은 두 개의 작업을 요청하고 두 개의 레코드로 구성된 파일의 형식을 보여 줍니다. 각 매개 변수 필드는 단일 L'\0' 문자로 끝납니다. 레코드는 4개의 연속 필드로 구성됩니다. 모든 레코드의 끝에 추가된 단일 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은 이를 파일 이동 요청으로 식별합니다. 이 필드의 값은 항상 L"MoveFile"이며 대/소문자를 구분합니다.

필드 2는 파일의 원본 위치를 지정합니다. Srdelayed 이동 파일 작업은 폴더 이동을 지원하지 않습니다. 이 필드에 파일을 지정해야 합니다. 이 필드의 값은 "\\??에 추가된 파일의 전체 경로입니다. 경로에 접두사로 "\\?\"를 사용하는 GUID(Globally Unique Identifier)가 포함되어 있지 않으면 \"입니다. "\\?\"에 추가하기 전에 "\\?\"를 제거하세요. \".

필드 3은 파일의 대상을 지정합니다. 파일 이동 작업은 볼륨 내에서만 작동합니다. 원본과 대상은 동일한 볼륨에 있어야 합니다. 이 필드의 값은 "\\??에 추가된 파일의 전체 경로입니다. 경로에 접두사로 "\\?\"를 사용하는 GUID(Globally Unique Identifier)가 포함되어 있지 않으면 \"입니다. "\\?\"에 추가하기 전에 "\\?\"를 제거하세요. \".

필드 4는 Srdelayed에서 상태 정보를 받습니다. 이 필드의 값은 새 레코드에 대해 L"NotExecuted"로 설정해야 합니다.

다음 예제에서는 드라이브 경로별로 파일을 참조합니다. 원본의 경로와 이름이 C:\Stage\a.dll 경우 이 레코드는 Srdelayed가 해당 경로를 C:\temp\a.dll 이동하도록 요청합니다.

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

다음 예제에서는 볼륨 GUID 경로별로 파일을 참조합니다. 원본의 경로와 이름이 \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\Stage\a.dll 이 레코드는 Srdelayed가 \\?\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(Globally Unique Identifier)가 포함되어 있지 않으면 \"입니다. "\\?\"에 추가하기 전에 "\\?\"를 제거하세요. \".

필드 4는 Srdelayed에서 상태 정보를 받습니다. 이 필드의 값은 새 레코드에 대해 L"NotExecuted"로 설정해야 합니다.

다음 예제에서는 드라이브 경로별로 파일을 참조합니다. 경로와 이름이 C:\temp\b.dll 경우 이 레코드는 Srdelayed에서 파일 삭제를 요청합니다.

DeleteFile 사용되지 않음 \\?? notExecuted \C:\temp\b.dll

다음 예제에서는 볼륨 GUID로 파일을 참조합니다. 경로와 이름이 \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6e6963}\temp\b.dll 경우 이 레코드는 Srdelayed가 파일을 제거해 달라는 요청을 합니다.

DeleteFile 사용되지 않음 \\?? \Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\b.dll\ NotExecuted

Short-Name 레코드 설정 형식

필드 1은 파일의 짧은 이름을 설정하기 위한 요청으로 식별합니다. 이 필드의 값은 항상 L"SetFileShortName"이며 대/소문자를 구분합니다.

필드 2는 짧은 이름을 지정합니다.

필드 3 필드는 짧은 이름을 받을 경로와 긴 이름을 지정합니다. 이 필드의 값은 "\\??에 추가된 파일의 경로 및 긴 이름입니다. 경로에 접두사로 "\\?\"를 사용하는 GUID(Globally Unique Identifier)가 포함되어 있지 않으면 \"입니다. "\\?\"에 추가하기 전에 "\\?\"를 제거하세요. \".

필드 4는 Srdelayed에서 상태 정보를 받습니다. 이 필드의 값은 새 레코드에 대해 L"NotExecuted"로 설정해야 합니다.

다음 예제에서는 드라이브 경로별로 파일을 참조합니다. 파일의 경로와 이름이 C:\temp\ShortFileName.dll 경우 이 레코드는 파일에 ShortN~1.dll 짧은 이름을 받도록 요청합니다.

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

다음 예제에서는 볼륨 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는 L"SC=xxxxxxx" 문자열을 텍스트 파일의 각 레코드의 네 번째 필드에 씁니다. 여기서 xxxxxxx는 요청된 작업의 상태 나타내는 16진수입니다. 값이 0이면 작업이 성공했음을 나타냅니다.

Srdelayed는 전체 복원 작업의 결과를 기록하기 위해 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion 아래에 SystemRestore라는 레지스트리 키를 만듭니다. Srdelayed가 요청된 모든 작업을 성공적으로 수행하면 RestoreStatusResult라는 이름이 이 키 아래에 0 값으로 기록됩니다. Srdelayed가 요청된 작업을 수행할 수 없는 경우 RestoreStatusResult 및 RestoreStatusDetails 이름은 0이 아닌 값으로 이 키 아래에 기록됩니다. RestoreStatusDetails라는 이름은 Srdelayed가 요청된 작업을 수행할 수 없는 경우에만 이 키 아래에 기록됩니다. 파일의 짧은 이름을 설정하는 작업이 실패하면 Srdelayed는 다음 작업을 계속합니다. Srdelayed는 파일 이동 및 삭제 파일 작업이 중요한 것으로 간주하며 이동 또는 삭제 작업이 실패한 경우 계속되지 않습니다.