Srdelayed.exe
Os aplicativos que executam operações de restauração de estado do sistema no início da inicialização do sistema operacional podem não poder usar as funções de gerenciamento de arquivos para mover, excluir ou definir o nome curto de determinados arquivos do sistema. Srdelayed.exe é um arquivo executável, fornecido com o recurso de Backup do Windows Server (WSB) no Windows Server 2008, que pode permitir que aplicativos de recuperação de estado do sistema movam, excluam e definam o nome curto 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 puder mover, excluir ou definir o nome curto de um arquivo do sistema usando as funções MoveFileEx, DeleteFilee 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 curto em determinados arquivos do sistema. O Srdelayed pode, portanto, ser útil para desenvolvedores que exigem a capacidade de restaurar esses arquivos do sistema em seus próprios aplicativos de recuperação de estado do sistema.
O Srdelayed pode executar as seguintes operações:
- Uma operação de arquivo de movimentação semelhante à funçãoMoveFileExcom o sinalizador MOVEFILE_DELAY_UNTIL_REBOOT
- Uma operação de exclusão de arquivo semelhante à função DeleteFile
- Uma operação de nome curto definida semelhante à funçãoSetFileShortName
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 que você criou para conter as informações que a ferramenta precisa para executar todas as operações de gerenciamento de arquivos que estão sendo 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 manipula qualquer ordenação 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 de 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\\Controle de\do CurrentControlSet\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 se chama DelayedOperations:
C:\Windows\System32\srdelayed.exe \\?? \C:\temp\DelayedOperations
Os espaços no caminho e no nome devem ser codificados hexadecimal. Por exemplo, para Arquivos de Programas, codificar o caminho como "\\?? \C:Program%20Files\a.dll".
Quando o registro ou o sistema está sendo restaurado após a reinicialização, seu aplicativo precisa garantir que SetupExecute seja gravado no hive do registro correto. A recuperação do registro é executada antes da execução do Srdelayed.exe. O aplicativo precisa gravar SetupExecute na versão recuperada do registro porque esta é a versão lida.
Formatar 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, um arquivo de exclusão ou uma operação de nome curto definido. Os quatro campos de cada registro contêm os parâmetros da 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 caractere L'\0' adicional é acrescentado 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 do primeiro, segundo, terceiro e quarto campos de parâmetro depende se o registro descreve uma operação de movimentação, exclusão ou definição de nome curto.
Formatar para um registro de arquivo de movimentação
O campo 1 identifica isso como uma solicitação para mover um arquivo. O valor nesse 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 arquivo de movimentação Srdelayed não dá suporte à movimentação de uma pasta. Um arquivo deve ser especificado neste campo. O valor desse campo é o caminho completo do arquivo acrescentado a "\\?? \" a menos que o caminho inclua um GUID (identificador global exclusivo), que usa "\\?\" como um prefixo. Remover "\\?\" antes de acrescentar a "\\?? \".
O campo 3 especifica o destino do arquivo. A operação de movimentação de arquivo funciona apenas em um volume. A origem e o destino devem estar no mesmo volume. O valor desse campo é o caminho completo do arquivo acrescentado a "\\?? \" a menos que o caminho inclua um GUID (identificador global exclusivo), que usa "\\?\" como um prefixo. Remover "\\?\" antes de acrescentar 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 da unidade. Se o caminho e o nome da origem estiverem C:\Stage\a.dll, esse registro solicitará que Srdelayed o mova para C:\temp\a.dll.
MoveFile \\?? \C:\Stage\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 for \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\Stage\a.dll, esse registro solicita que 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
Formatar para um registro de arquivo de exclusão
O campo 1 identifica isso como uma solicitação para excluir um arquivo. O valor nesse campo é sempre L"DeleteFile" e diferencia maiúsculas de minúsculas.
O campo 2 não é utilizado. O valor nesse campo deve ser definido como L"Não utilizado".
O campo 3 especifica o arquivo a ser removido. Uma pasta deve estar vazia para ser removida. Use operações de arquivo de exclusão para remover todos os arquivos na pasta antes de remover a pasta. O valor desse campo é o caminho completo do arquivo acrescentado a "\\?? \" a menos que o caminho inclua um GUID (identificador global exclusivo), que usa "\\?\" como um prefixo. Remover "\\?\" antes de acrescentar 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 da unidade. Se o caminho e o nome estiverem C:\temp\b.dll, esse registro solicitará que 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 solicita que Srdelayed remova o arquivo.
DeleteFile Não Utilizado \\??\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\b.dll\ NotExecuted
Formatar para Definir Registro de Short-Name
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 curto.
O campo 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 acrescentado a "\\?? \" a menos que o caminho inclua um GUID (identificador global exclusivo), que usa "\\?\" como um prefixo. Remover "\\?\" antes de acrescentar 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 da unidade. Se o caminho e o nome do arquivo estiverem C:\temp\ShortFileName.dll, this record requests that the file receive a short name, 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 for \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\ShortFileName.dll\, this record requests that the file receive a short name, ShortN~1.dll.
SetFileShortName ShortN~1.dll \\??\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\ShortFileName.dll\ NotExecuted
Status das operações srdelayed
Srdelayed grava a cadeia de caracteres L"SC=xxxxxxx" no quarto campo de cada registro do arquivo de texto, em que xxxxxxx é um hexadecimal que indica o status da operação solicitada. Um valor igual a zero indica que a operação foi bem-sucedida.
O Srdelayed cria uma chave do Registro chamada SystemRestore em HKEY_LOCAL_MACHINE\Software\Microsoft\CurrentVersion do Windows \NT 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 puder executar nenhuma das operações solicitadas, os nomes RestoreStatusResult e RestoreStatusDetails serão gravados sob essa chave com valores não zero. O nome RestoreStatusDetails será gravado sob essa chave somente se Srdelayed não puder executar nenhuma operação solicitada. Se uma operação para definir o nome curto de um arquivo não for bem-sucedida, Srdelayed continuará para a próxima operação. Srdelayed considera as operações de arquivo de movimentação e exclusão críticas e não continua se uma operação de movimentação ou exclusão não tiver êxito.