Partager via


Srdelayed.exe

Les applications qui effectuent des opérations de restauration de l’état du système au début du démarrage du système d’exploitation peuvent ne pas pouvoir utiliser les fonctions de gestion de fichiers pour déplacer, supprimer ou définir le nom court de certains fichiers système. Srdelayed.exe est un fichier exécutable, fourni avec la fonctionnalité Sauvegarde Windows Server (WSB) dans Windows Server 2008, qui peut permettre aux applications de récupération de l’état du système de déplacer, de supprimer et de définir le nom court des fichiers système.

L’outil Srdelayed est destiné aux applications de récupération d’état du système ; elle ne remplace pas les fonctions de gestion de fichiers. Cet outil doit être utilisé uniquement lorsque l’application ne peut pas déplacer, supprimer ou définir le nom court d’un fichier système à l’aide des fonctions MoveFileEx, DeleteFile et SetFileShortName . Lors d’une restauration et d’un redémarrage de l’état du système, Srdelayed.exe est utilisé par la restauration du système et l’outil en ligne de commande wbadmin.exe pour déplacer, supprimer et définir le nom court sur certains fichiers système. Srdelayed peut donc être utile pour les développeurs qui ont besoin de la possibilité de restaurer ces fichiers système dans leurs propres applications de récupération d’état système.

Srdelayed peut effectuer les opérations suivantes :

  • Opération de déplacement de fichier similaire à la fonction MoveFileEx avec l’indicateur MOVEFILE_DELAY_UNTIL_REBOOT
  • Opération de suppression de fichier similaire à la fonction DeleteFile
  • Opération set short-name similaire à la fonction SetFileShortName

Pour utiliser Srdelayed, votre application nécessite le chemin d’accès complet à l’emplacement du fichier Srdelayed.exe et le chemin d’accès complet à un fichier texte Unicode que vous avez créé pour contenir les informations dont l’outil a besoin pour effectuer toutes les opérations de gestion de fichiers demandées. Votre application est chargée de s’assurer que ce fichier texte ne contient pas de demandes redondantes pour une opération et qu’elle gère l’ordre requis des opérations de gestion de fichiers. Par exemple, étant donné qu’un dossier doit être vide pour être supprimé, votre application doit s’assurer que le fichier texte spécifie la suppression de tous les fichiers à l’intérieur du dossier avant de demander la suppression du dossier.

Si l’entrée SetupExecute n’existe pas déjà dans le Registre, votre application doit créer une entrée de type REG_MULTI_SZ nommée SetupExecute sous la clé de Registre suivante : HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager.

Votre application doit utiliser le format suivant pour définir la valeur de SetupExecute sur le chemin d’accès complet à l’emplacement du fichier Srdelayed.exe et le chemin d’accès complet à l’emplacement du fichier texte. Préfixe « \\?? \ » au chemin d’accès du fichier texte, comme suit :

Chemin d’accès complet à Srdelayed.exe \\?? \Chemin d’accès complet au fichier texte

Par exemple, la valeur suivante pour SetupExecute indique que le Srdelayed.exe se trouve dans le dossier System32 et que le fichier texte est nommé DelayedOperations :

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

Les espaces dans le chemin et le nom doivent être encodés hexadécimaux. Par exemple, pour Program Files, encodez le chemin d’accès en tant que « \\?? \C:Program%20Files\a.dll ».

Lorsque le registre ou le système est restauré lors du redémarrage, votre application doit s’assurer que SetupExecute est écrit dans la ruche de Registre appropriée. La récupération du Registre est effectuée avant l’exécution de Srdelayed.exe. L’application doit écrire SetupExecute dans la version récupérée du Registre, car il s’agit de la version qui est lue.

Format du fichier d’entrée srdelayed

Toutes les informations dont Srdelayed a besoin pour effectuer des opérations de gestion de fichiers sont spécifiées sous la forme d’une chaîne de caractères Unicode dans un fichier texte Unicode. La chaîne de caractères Unicode est partitionnée en enregistrements eux-mêmes partitionnés en quatre champs. Chaque enregistrement spécifie une opération de déplacement unique, de suppression de fichier ou de définition de nom court. Les quatre champs de chaque enregistrement contiennent les paramètres de l’opération. Srdelayed.exe effectue chaque opération dans l’ordre dans lequel leurs enregistrements se produisent dans la chaîne. Votre application doit case activée pour tous les enregistrements en double dans ce fichier et supprimer les doublons.

La chaîne suivante illustre le format d’un fichier demandant deux opérations et se composant de deux enregistrements. Chaque champ de paramètre se termine par un seul caractère L'\0'. Un enregistrement est composé de quatre champs consécutifs. Un caractère L'\0' supplémentaire est ajouté à la fin de tous les enregistrements.

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

La signification des premiers, deuxièmes, troisièmes et quatrièmes champs de paramètre varie selon que l’enregistrement décrit une opération de déplacement, de suppression ou de définition de nom court.

Format d’un enregistrement de fichier de déplacement

Le champ 1 l’identifie comme une demande de déplacement d’un fichier. La valeur de ce champ est toujours L« MoveFile » et respecte la casse.

Le champ 2 spécifie l’emplacement source du fichier. L’opération srdelayed move file ne prend pas en charge le déplacement d’un dossier. Un fichier doit être spécifié dans ce champ. La valeur de ce champ est le chemin d’accès complet du fichier ajouté à « \\?? \ » sauf si le chemin d’accès inclut un identificateur global unique (GUID), qui utilise « \\?\ » comme préfixe. Supprimez « \\?\ » avant d’ajouter à « \\?? \".

Le champ 3 spécifie la destination du fichier. L’opération de déplacement de fichier fonctionne uniquement au sein d’un volume. La source et la destination doivent se trouver sur le même volume. La valeur de ce champ est le chemin d’accès complet du fichier ajouté à « \\?? \ » sauf si le chemin d’accès inclut un identificateur global unique (GUID), qui utilise « \\?\ » comme préfixe. Supprimez « \\?\ » avant d’ajouter à « \\?? \".

Le champ 4 reçoit des informations status de Srdelayed. La valeur de ce champ doit être définie sur L"NotExecuted » pour un nouvel enregistrement.

L’exemple suivant référence le fichier par chemin de lecteur. Si le chemin d’accès et le nom de la source sont C:\Stage\a.dll, cet enregistrement demande à Srdelayed de le déplacer vers C:\temp\a.dll.

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

L’exemple suivant référence le fichier par chemin d’accès GUID de volume. Si le chemin et le nom de la source sont \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6e6963}\Stage\a.dll, cet enregistrement demande à Srdelayed de le déplacer vers \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6e6963}\temp\a.dll

MoveFile \\?? \Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\Stage\a.dll \\?? \Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\a.dll NotExecuted

Format d’un enregistrement de fichier de suppression

Le champ 1 l’identifie comme une demande de suppression d’un fichier. La valeur de ce champ est toujours L"DeleteFile » et respecte la casse.

Le champ 2 n’est pas utilisé. La valeur de ce champ doit être définie sur L"Unused ».

Le champ 3 spécifie le fichier à supprimer. Un dossier doit être vide pour être supprimé. Utilisez les opérations de suppression de fichier pour supprimer tous les fichiers du dossier avant de supprimer le dossier. La valeur de ce champ est le chemin d’accès complet du fichier ajouté à « \\?? \ » sauf si le chemin d’accès inclut un identificateur global unique (GUID), qui utilise « \\?\ » comme préfixe. Supprimez « \\?\ » avant d’ajouter à « \\?? \".

Le champ 4 reçoit des informations status de Srdelayed. La valeur de ce champ doit être définie sur L"NotExecuted » pour un nouvel enregistrement.

L’exemple suivant référence le fichier par chemin de lecteur. Si le chemin d’accès et le nom sont C:\temp\b.dll, cet enregistrement demande à Srdelayed de supprimer le fichier.

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

L’exemple suivant référence le fichier par GUID de volume. Si le chemin et le nom sont \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6e6963}\temp\b.dll, cet enregistrement demande à Srdelayed de supprimer le fichier.

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

Format pour définir l’enregistrement Short-Name

Le champ 1 l’identifie comme une demande de définition du nom court d’un fichier. La valeur dans ce champ est toujours L"SetFileShortName » et respecte la casse.

Le champ 2 spécifie le nom court.

Le champ Champ 3 spécifie le chemin d’accès et le nom long pour recevoir le nom court. La valeur de ce champ est le chemin d’accès et le nom long du fichier ajouté à « \\?? \ » sauf si le chemin d’accès inclut un identificateur global unique (GUID), qui utilise « \\?\ » comme préfixe. Supprimez « \\?\ » avant d’ajouter à « \\?? \".

Le champ 4 reçoit des informations status de Srdelayed. La valeur de ce champ doit être définie sur L"NotExecuted » pour un nouvel enregistrement.

L’exemple suivant référence le fichier par chemin de lecteur. Si le chemin d’accès et le nom du fichier sont C:\temp\ShortFileName.dll, cet enregistrement demande que le fichier reçoive un nom court, ShortN~1.dll.

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

L’exemple suivant référence le fichier par GUID de volume. Si le chemin et le nom du fichier sont \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6e6e6963}\temp\ShortFileName.dll\, cet enregistrement demande que le fichier reçoive un nom court, ShortN~1.dll.

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

État des opérations retardées

Srdelayed écrit la chaîne L"SC=xxxxxxx » dans le quatrième champ de chaque enregistrement du fichier texte, où xxxxxxx est un hexadécimal qui indique la status de l’opération demandée. La valeur zéro indique que l’opération a réussi.

Srdelayed crée une clé de Registre nommée SystemRestore sous HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion pour journaliser le résultat de l’opération de restauration entière. Si Srdelayed effectue toutes les opérations demandées avec succès, le nom RestoreStatusResult est écrit sous cette clé avec une valeur zéro. Si Srdelayed ne peut effectuer aucune des opérations demandées, les noms RestoreStatusResult et RestoreStatusDetails sont écrits sous cette clé avec des valeurs différentes de zéro. Le nom RestoreStatusDetails est écrit sous cette clé uniquement si Srdelayed ne peut pas effectuer les opérations demandées. Si une opération de définition du nom court d’un fichier échoue, Srdelayed passe à l’opération suivante. Srdelayed considère les opérations de déplacement de fichier et de suppression de fichier comme critiques et ne se poursuit pas si une opération de déplacement ou de suppression échoue.