Compartir a través de


Srdelayed.exe

Es posible que las aplicaciones que realizan operaciones de restauración de estado del sistema al principio del inicio del sistema operativo no puedan usar las funciones de administración de archivos para mover, eliminar o establecer el nombre corto de determinados archivos del sistema. Srdelayed.exe es un archivo ejecutable, proporcionado con la característica Copia de seguridad de Windows Server (WSB) en Windows Server 2008, que puede permitir que las aplicaciones de recuperación de estado del sistema muevan, eliminen y establezcan el nombre corto de los archivos del sistema.

La herramienta Srdelayed está pensada para aplicaciones de recuperación de estado del sistema; no reemplaza las funciones de administración de archivos. Esta herramienta solo se debe usar cuando la aplicación no puede mover, eliminar o establecer el nombre corto de un archivo del sistema mediante las funciones MoveFileEx, DeleteFile y SetFileShortName . Durante una restauración y reinicio del estado del sistema, la restauración del sistema usa Srdelayed.exe y la herramienta de línea de comandos wbadmin.exe para mover, eliminar y establecer el nombre corto en determinados archivos del sistema. Srdelayed puede ser útil para los desarrolladores que requieren la capacidad de restaurar estos archivos del sistema en sus propias aplicaciones de recuperación de estado del sistema.

Srdelayed puede realizar las siguientes operaciones:

  • Una operación de archivo de movimiento similar a la función MoveFileEx con la marca MOVEFILE_DELAY_UNTIL_REBOOT
  • Una operación de eliminación de archivo similar a la función DeleteFile
  • Una operación de nombre corto establecida similar a la función SetFileShortName

Para usar Srdelayed, la aplicación requiere la ruta de acceso completa a la ubicación del archivo Srdelayed.exe y la ruta de acceso completa a un archivo de texto Unicode que ha creado para contener la información que la herramienta necesita para realizar todas las operaciones de administración de archivos que se solicitan. La aplicación es responsable de garantizar que este archivo de texto no contenga solicitudes redundantes para una operación y que controle los pedidos necesarios de las operaciones de administración de archivos. Por ejemplo, dado que una carpeta debe estar vacía para eliminarse, la aplicación debe asegurarse de que el archivo de texto especifica la eliminación de todos los archivos dentro de la carpeta antes de solicitar la eliminación de la carpeta.

Si la entrada SetupExecute aún no existe en el Registro, la aplicación debe crear una entrada de tipo REG_MULTI_SZ denominada SetupExecute en la siguiente clave del Registro: HKEY_LOCAL_MACHINE\ Administrador desesiones decontrol\CurrentControlSet\ delsistema\.

La aplicación debe usar el siguiente formato para establecer el valor de SetupExecute en la ruta de acceso completa a la ubicación del archivo Srdelayed.exe y la ruta de acceso completa a la ubicación del archivo de texto. Prefijo "\\?? \" a la ruta de acceso del archivo de texto, como se indica a continuación:

Ruta de acceso completa a Srdelayed.exe \\?? \Ruta de acceso completa al archivo de texto

Por ejemplo, el siguiente valor para SetupExecute indica que el Srdelayed.exe se encuentra en la carpeta System32 y el archivo de texto se denomina DelayedOperations:

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

Los espacios de la ruta de acceso y el nombre deben estar codificados en hexadecimal. Por ejemplo, para Archivos de programa, codifique la ruta de acceso como "\\?? \C:Program%20Files\a.dll".

Cuando el registro o el sistema se restauran al reiniciarse, la aplicación debe asegurarse de que SetupExecute se escribe en el subárbol del registro correcto. La recuperación del registro se realiza antes de que se ejecute Srdelayed.exe. La aplicación debe escribir SetupExecute en la versión recuperada del registro porque esta es la versión que se lee.

Formato del archivo de entrada Srdelayed

Toda la información que Srdelayed necesita para realizar operaciones de administración de archivos se especifica como una cadena de caracteres Unicode en un archivo de texto Unicode. La cadena de caracteres Unicode se divide en registros que se dividen en cada uno de ellos en cuatro campos. Cada registro especifica un único archivo de movimiento, un archivo de eliminación o una operación de nombre corto establecido. Los cuatro campos de cada registro contienen los parámetros de la operación. Srdelayed.exe realiza cada operación en el orden en que se producen sus registros en la cadena. La aplicación debe comprobar si hay registros duplicados en este archivo y quitar los duplicados.

En la cadena siguiente se muestra el formato de un archivo que solicita dos operaciones y consta de dos registros. Cada campo de parámetro termina con un solo carácter L'\0'. Un registro se compone de cuatro campos consecutivos. Se anexa un carácter L'\0' adicional al final de todos los 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------------------------|

El significado de los campos de primer, segundo, tercero y cuarto parámetro depende de si el registro describe una operación de movimiento, eliminación o establecimiento de nombre corto.

Formato de un registro de archivo de movimiento

El campo 1 lo identifica como una solicitud para mover un archivo. El valor de este campo siempre es L"MoveFile" y distingue mayúsculas de minúsculas.

El campo 2 especifica la ubicación de origen del archivo. La operación de archivo de movimiento Srdelayed no admite mover una carpeta. Se debe especificar un archivo en este campo. El valor de este campo es la ruta de acceso completa del archivo anexado a "\\?? \" a menos que la ruta de acceso incluya un identificador único global (GUID), que usa "\\?\" como prefijo. Quite "\\?\" antes de anexar a "\\?? \".

El campo 3 especifica el destino del archivo. La operación mover archivo solo funciona dentro de un volumen. El origen y el destino deben estar en el mismo volumen. El valor de este campo es la ruta de acceso completa del archivo anexado a "\\?? \" a menos que la ruta de acceso incluya un identificador único global (GUID), que usa "\\?\" como prefijo. Quite "\\?\" antes de anexar a "\\?? \".

El campo 4 recibe información de estado de Srdelayed. El valor de este campo debe establecerse en L"NotExecuted" para un nuevo registro.

En el ejemplo siguiente se hace referencia al archivo por ruta de acceso de unidad. Si la ruta de acceso y el nombre del origen se C:\Stage\a.dll, este registro solicita que Srdelayed lo mueva a C:\temp\a.dll.

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

En el ejemplo siguiente se hace referencia al archivo por ruta de acceso GUID de volumen. Si la ruta de acceso y el nombre del origen es \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\Stage\a.dll, este registro solicita que Srdelayed lo mueva a \\?\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 de un registro de archivo de eliminación

El campo 1 lo identifica como una solicitud para eliminar un archivo. El valor de este campo siempre es L"DeleteFile" y distingue mayúsculas de minúsculas.

El campo 2 no se usa. El valor de este campo debe establecerse en L"Unused".

El campo 3 especifica el archivo que se va a quitar. Una carpeta debe estar vacía para quitarse. Use las operaciones de eliminación de archivos para quitar todos los archivos de la carpeta antes de quitar la carpeta. El valor de este campo es la ruta de acceso completa del archivo anexado a "\\?? \" a menos que la ruta de acceso incluya un identificador único global (GUID), que usa "\\?\" como prefijo. Quite "\\?\" antes de anexar a "\\?? \".

El campo 4 recibe información de estado de Srdelayed. El valor de este campo debe establecerse en L"NotExecuted" para un nuevo registro.

En el ejemplo siguiente se hace referencia al archivo por ruta de acceso de unidad. Si la ruta de acceso y el nombre se C:\temp\b.dll, este registro solicita que Srdelayed elimine el archivo.

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

En el ejemplo siguiente se hace referencia al archivo por GUID de volumen. Si la ruta de acceso y el nombre son \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\b.dll, este registro solicita que Srdelayed quite el archivo.

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

Formato para establecer Short-Name registro

El campo 1 identifica esto como una solicitud para establecer el nombre corto de un archivo. El valor de este campo siempre es L"SetFileShortName" y distingue mayúsculas de minúsculas.

El campo 2 especifica el nombre corto.

El campo 3 especifica la ruta de acceso y el nombre largo para recibir el nombre corto. El valor de este campo es la ruta de acceso y el nombre largo del archivo anexado a "\\?? \" a menos que la ruta de acceso incluya un identificador único global (GUID), que usa "\\?\" como prefijo. Quite "\\?\" antes de anexar a "\\?? \".

El campo 4 recibe información de estado de Srdelayed. El valor de este campo debe establecerse en L"NotExecuted" para un nuevo registro.

En el ejemplo siguiente se hace referencia al archivo por ruta de acceso de unidad. Si la ruta de acceso y el nombre del archivo se C:\temp\ShortFileName.dll, este registro solicita que el archivo reciba un nombre corto, ShortN~1.dll.

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

En el ejemplo siguiente se hace referencia al archivo por GUID de volumen. Si la ruta de acceso y el nombre del archivo son \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\ShortFileName.dll\, este registro solicita que el archivo reciba un nombre corto, ShortN~1.dll.

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

Estado de las operaciones srdelayed

Srdelayed escribe la cadena L"SC=xxxxxxx" en el cuarto campo de cada registro del archivo de texto, donde xxxxxxx es un hexadecimal que indica el estado de la operación solicitada. Un valor de cero indica que la operación se realizó correctamente.

Srdelayed crea una clave del Registro denominada SystemRestore en HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion para registrar el resultado de toda la operación de restauración. Si Srdelayed realiza todas las operaciones solicitadas correctamente, el nombre RestoreStatusResult se escribe en esta clave con un valor cero. Si Srdelayed no puede realizar ninguna de las operaciones solicitadas, los nombres RestoreStatusResult y RestoreStatusDetails se escriben en esta clave con valores distintos de cero. El nombre RestoreStatusDetails se escribe en esta clave solo si Srdelayed no puede realizar ninguna operación solicitada. Si una operación para establecer el nombre corto de un archivo no es correcta, Srdelayed continúa con la siguiente operación. Srdelayed considera que las operaciones de movimiento y eliminación de archivos son críticas y no continúan si una operación de movimiento o eliminación no es correcta.