Compartilhar via


Srdelayed.exe

Os aplicativos que executam operações de restauração do estado do sistema no início da inicialização do sistema operacional podem não conseguir usar as funções de gerenciamento de arquivos para mover, excluir ou definir o nome abreviado de determinados arquivos do sistema. Srdelayed.exe é um arquivo executável, fornecido com o recurso Backup do Windows Server (WSB) no Windows Server 2008, que pode permitir que os aplicativos de recuperação de estado do sistema movam, excluam e definam o nome abreviado dos arquivos do sistema.

A ferramenta Srdelayed destina-se a aplicativos de recuperação de estado do sistema; ele não substitui as funções de gerenciamento de arquivos. Essa ferramenta deve ser usada somente quando o aplicativo não consegue mover, excluir ou definir o nome abreviado de um arquivo de sistema usando as funções MoveFileEx, DeleteFile e SetFileShortName. Durante uma restauração e reinicialização do estado do sistema, Srdelayed.exe é usado pela Restauração do Sistema e pela ferramenta de linha de comando wbadmin.exe para mover, excluir e definir o nome abreviado em determinados arquivos do sistema. Srdelayed pode, portanto, ser útil para desenvolvedores que exigem a capacidade de restaurar esses arquivos de sistema em seus próprios aplicativos de recuperação de estado do sistema.

Srdelayed pode executar as seguintes operações:

Para usar o Srdelayed, seu aplicativo requer o caminho completo para o local do arquivo Srdelayed.exe e o caminho completo para um arquivo de texto Unicode criado por você para conter as informações de que a ferramenta precisa para executar todas as operações de gerenciamento de arquivos solicitadas. Seu aplicativo é responsável por garantir que esse arquivo de texto não contenha solicitações redundantes para uma operação e que ele manipule qualquer ordem necessária das operações de gerenciamento de arquivos. Por exemplo, como uma pasta deve estar vazia para ser excluída, seu aplicativo precisa garantir que o arquivo de texto especifique a remoção de todos os arquivos dentro da pasta antes de solicitar que a pasta seja excluída.

Se a entrada SetupExecute ainda não existir no registro, seu aplicativo precisará criar uma entrada de tipo REG_MULTI_SZ chamada SetupExecute na seguinte chave do Registro: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager.

Seu aplicativo deve usar o seguinte formato para definir o valor de SetupExecute para o caminho completo para o local do arquivo Srdelayed.exe e o caminho completo para o local do arquivo de texto. Prefixo "\\?? \" para o caminho do arquivo de texto, da seguinte maneira:

Caminho completo para Srdelayed.exe \\?? \Caminho completo para o arquivo de texto

Por exemplo, o seguinte valor para SetupExecute indica que o Srdelayed.exe está localizado na pasta System32 e o arquivo de texto é chamado DelayedOperations:

C:\Windows\System32\srdelayed.exe \\?? \C:\temp\Operações Atrasadas

Os espaços no caminho e no nome devem ser codificados hexadecimalmente. Por exemplo, para Arquivos de Programas, codifique o caminho como "\\?? \C:Programa%20Arquivos\a.dll".

Quando o registro ou sistema está sendo restaurado na reinicialização, seu aplicativo precisa garantir que SetupExecute seja gravado na seção de registro correta. A recuperação do registro é executada antes Srdelayed.exe é executada. O aplicativo precisa gravar SetupExecute na versão recuperada do registro porque esta é a versão que é lida.

Formato para o arquivo de entrada Srdelayed

Todas as informações que o Srdelayed precisa para executar operações de gerenciamento de arquivos são especificadas como uma cadeia de caracteres Unicode em um arquivo de texto Unicode. A cadeia de caracteres Unicode é particionada em registros que são particionados em quatro campos. Cada registro especifica um único arquivo de movimentação, exclusão de arquivo ou operação de nome curto. Os quatro campos de cada registro contêm os parâmetros para a operação. Srdelayed.exe executa cada operação na ordem em que seus registros ocorrem na cadeia de caracteres. Seu aplicativo deve verificar se há registros duplicados neste arquivo e remover as duplicatas.

A cadeia de caracteres a seguir ilustra o formato de um arquivo que solicita duas operações e consiste em dois registros. Cada campo de parâmetro termina com um único caractere L'\0'. Um registro é composto por quatro campos consecutivos. Um único caractere L'\0' adicional é anexado ao final de todos os registros.

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

O significado dos campos primeiro, segundo, terceiro e quarto parâmetros depende se o registro descreve uma operação de mover, excluir ou definir nomes curtos.

Formato para um registro de arquivo de movimentação

O campo 1 identifica isso como uma solicitação para mover um arquivo. O valor neste campo é sempre L"MoveFile" e diferencia maiúsculas de minúsculas.

O campo 2 especifica o local de origem do arquivo. A operação de movimentação de arquivo Srdelayed não oferece suporte à movimentação de uma pasta. Um arquivo deve ser especificado neste campo. O valor desse campo é o caminho completo do arquivo anexado a "\\?? \", a menos que o caminho inclua um identificador global exclusivo (GUID), que usa "\\?\" como prefixo. Remova "\\?\" antes de anexar a "\\?? \".

O campo 3 especifica o destino do arquivo. A operação de mover arquivo funciona somente dentro de um volume. A origem e o destino devem estar no mesmo volume. O valor desse campo é o caminho completo do arquivo anexado a "\\?? \", a menos que o caminho inclua um identificador global exclusivo (GUID), que usa "\\?\" como prefixo. Remova "\\?\" antes de anexar a "\\?? \".

O campo 4 recebe informações de status do Srdelayed. O valor nesse campo deve ser definido como L"NotExecuted" para um novo registro.

O exemplo a seguir faz referência ao arquivo por caminho de unidade. Se o caminho e o nome da origem forem C:\Stage\a.dll, esse registro solicitará que Srdelayed o mova para C:\temp\a.dll.

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

O exemplo a seguir faz referência ao arquivo por caminho GUID de volume. Se o caminho e o nome da origem forem \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\Stage\a.dll, esse registro solicitará que o Srdelayed o mova para \\?\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

Formato para um registro de arquivo de exclusão

O campo 1 identifica isso como uma solicitação para excluir um arquivo. O valor neste campo é sempre L"DeleteFile" e diferencia maiúsculas de minúsculas.

O campo 2 não é utilizado. O valor neste campo deve ser definido como L"Unused".

O campo 3 especifica o arquivo a ser removido. Uma pasta deve estar vazia para ser removida. Use operações de exclusão de arquivo para remover todos os arquivos na pasta antes de removê-la. O valor desse campo é o caminho completo do arquivo anexado a "\\?? \", a menos que o caminho inclua um identificador global exclusivo (GUID), que usa "\\?\" como prefixo. Remova "\\?\" antes de anexar a "\\?? \".

O campo 4 recebe informações de status do Srdelayed. O valor nesse campo deve ser definido como L"NotExecuted" para um novo registro.

O exemplo a seguir faz referência ao arquivo por caminho de unidade. Se o caminho e o nome forem C:\temp\b.dll, esse registro solicitará que o Srdelayed exclua o arquivo.

DeleteFile não utilizado \\?? \C:\temp\b.dll NotExecuted

O exemplo a seguir faz referência ao arquivo por GUID de volume. Se o caminho e o nome forem \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\b.dll, esse registro solicitará que o Srlate remova o arquivo.

DeleteFile não utilizado \\?? \volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\b.dll\ NotExecuted

Formato para definir registro de nome curto

O campo 1 identifica isso como uma solicitação para definir o nome curto de um arquivo. O valor nesse campo é sempre L"SetFileShortName" e diferencia maiúsculas de minúsculas.

O campo 2 especifica o nome abreviado.

O campo 3 especifica o caminho e o nome longo para receber o nome curto. O valor desse campo é o caminho e o nome longo do arquivo anexado a "\\?? \", a menos que o caminho inclua um identificador global exclusivo (GUID), que usa "\\?\" como prefixo. Remova "\\?\" antes de anexar a "\\?? \".

O campo 4 recebe informações de status do Srdelayed. O valor nesse campo deve ser definido como L"NotExecuted" para um novo registro.

O exemplo a seguir faz referência ao arquivo por caminho de unidade. Se o caminho e o nome do arquivo forem C:\temp\ShortFileName.dll, esse registro solicitará que o arquivo receba um nome curto, ShortN~1.dll.

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

O exemplo a seguir faz referência ao arquivo por GUID de volume. Se o caminho e o nome do arquivo forem \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\ShortFileName.dll\, esse registro solicitará que o arquivo receba um nome curto, ShortN~1.dll.

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

Status das operações atrasadas

Srdelayed grava a cadeia de caracteres L"SC=xxxxxxx" no quarto campo de cada registro do arquivo de texto, onde xxxxxxx é um hexadecimal que indica o status da operação solicitada. Um valor zero indica que a operação foi bem-sucedida.

Srdelayed cria uma chave do Registro chamada SystemRestore em HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion para registrar o resultado de toda a operação de restauração. Se Srdelayed executar todas as operações solicitadas com êxito, o nome RestoreStatusResult será escrito sob essa chave com um valor zero. Se Srdelayed não conseguir executar nenhuma das operações solicitadas, os nomes RestoreStatusResult e RestoreStatusDetails serão gravados nessa chave com valores diferentes de zero. O nome RestoreStatusDetails é escrito sob essa chave somente se Srdelay não conseguir executar nenhuma operação solicitada. Se uma operação para definir o nome abreviado de um arquivo não for bem-sucedida, Srdelayed continuará para a próxima operação. Srdelayed considera as operações de mover e excluir arquivo como críticas e não continua se uma operação de movimentação ou exclusão não for bem-sucedida.