Srdelayed.exe
Le applicazioni che eseguono operazioni di ripristino dello stato del sistema all'inizio dell'avvio del sistema operativo potrebbero non essere in grado di usare le funzioni di gestione dei file per spostare, eliminare o impostare il nome breve di determinati file di sistema. Srdelayed.exe è un file eseguibile, fornito con la funzionalità Windows Server Backup (WSB) in Windows Server 2008, che consente alle applicazioni di ripristino dello stato del sistema di spostare, eliminare e impostare il nome breve dei file di sistema.
Lo strumento Srdelayed è destinato alle applicazioni di ripristino dello stato del sistema; non sostituisce le funzioni di gestione dei file. Questo strumento deve essere usato solo quando l'applicazione non è in grado di spostare, eliminare o impostare il nome breve di un file di sistema usando le funzioni MoveFileEx, DeleteFile e SetFileShortName. Durante il ripristino e il riavvio dello stato del sistema, Srdelayed.exe viene usato da Ripristino di sistema e dallo strumento da riga di comando wbadmin.exe per spostare, eliminare e impostare il nome breve in determinati file di sistema. Srdelayed può quindi essere utile per gli sviluppatori che richiedono la capacità di ripristinare questi file di sistema nelle proprie applicazioni di ripristino dello stato del sistema.
Srdelayed può eseguire le operazioni seguenti:
- Operazione di spostamento del file simile alla funzione MoveFileEx con il flag MOVEFILE_DELAY_UNTIL_REBOOT
- Operazione di eliminazione del file simile alla funzione DeleteFile
- Operazione set short-name simile alla funzione SetFileShortName
Per usare Srdelayed, l'applicazione richiede il percorso completo del file Srdelayed.exe e il percorso completo di un file di testo Unicode creato per contenere le informazioni necessarie allo strumento per eseguire tutte le operazioni di gestione dei file richieste. L'applicazione è responsabile di garantire che questo file di testo non contenga richieste ridondanti per un'operazione e che gestisca l'ordinamento necessario delle operazioni di gestione dei file. Ad esempio, poiché una cartella deve essere vuota da eliminare, l'applicazione deve assicurarsi che il file di testo specifichi la rimozione di tutti i file all'interno della cartella prima di richiedere l'eliminazione della cartella.
Se la voce SetupExecute non esiste già nel Registro di sistema, l'applicazione deve creare una voce di tipo REG_MULTI_SZ denominata SetupExecute nella chiave del Registro di sistema seguente: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager.
L'applicazione deve usare il formato seguente per impostare il valore di SetupExecute sul percorso completo del file di Srdelayed.exe e il percorso completo del file di testo. Prefisso "\\?? \" al percorso del file di testo, come indicato di seguito:
Percorso completo per Srdelayed.exe \\?? \Percorso completo del file di testo
Ad esempio, il valore seguente per SetupExecute indica che il Srdelayed.exe si trova nella cartella System32 e il file di testo è denominato DelayedOperations:
C:\Windows\System32\srdelayed.exe \\?? \C:\temp\DelayedOperations
Gli spazi nel percorso e nel nome devono essere codificati in formato esadecimale. Ad esempio, per Programmi, codificare il percorso come "\\?? \C:Program%20Files\a.dll".
Quando il registro o il sistema viene ripristinato al riavvio, l'applicazione deve assicurarsi che SetupExecute venga scritto nell'hive del Registro di sistema corretto. Il ripristino del Registro di sistema viene eseguito prima dell'esecuzione di Srdelayed.exe. L'applicazione deve scrivere SetupExecute nella versione ripristinata del Registro di sistema perché si tratta della versione letta.
Formato per il file di input srdelayed
Tutte le informazioni necessarie per eseguire operazioni di gestione dei file devono essere specificate come stringa di caratteri Unicode in un file di testo Unicode. La stringa di caratteri Unicode viene partizionata in record che sono stessi partizionati in quattro campi. Ogni record specifica un singolo file di spostamento, un file di eliminazione o un'operazione di nome breve. I quattro campi di ogni record contengono i parametri per l'operazione. Srdelayed.exe esegue ogni operazione nell'ordine in cui si verificano i record nella stringa. L'applicazione deve verificare la presenza di record duplicati in questo file e rimuovere i duplicati.
La stringa seguente illustra il formato per un file che richiede due operazioni e costituito da due record. Ogni campo parametro termina con un singolo carattere L'\0'. Un record è composto da quattro campi consecutivi. Alla fine di tutti i record viene aggiunto un singolo carattere L'\0' aggiuntivo.
<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------------------------|
Il significato dei campi del primo, secondo, terzo e quarto parametro dipende dal fatto che il record descriva un'operazione di spostamento, eliminazione o imposta nome breve.
Formato per un record di spostamento di file
Il campo 1 lo identifica come richiesta di spostamento di un file. Il valore in questo campo è sempre L"MoveFile" e fa distinzione tra maiuscole e minuscole.
Il campo 2 specifica il percorso di origine del file. L'operazione Srdelayed move file non supporta lo spostamento di una cartella. È necessario specificare un file in questo campo. Il valore per questo campo è il percorso completo del file aggiunto a "\\?? \" a meno che il percorso non includa un identificatore univoco globale (GUID), che usa "\\?\" come prefisso. Rimuovere "\\?\" prima di accodare a "\\?? \".
Il campo 3 specifica la destinazione del file. L'operazione di spostamento del file funziona solo all'interno di un volume. L'origine e la destinazione devono trovarsi nello stesso volume. Il valore per questo campo è il percorso completo del file aggiunto a "\\?? \" a meno che il percorso non includa un identificatore univoco globale (GUID), che usa "\\?\" come prefisso. Rimuovere "\\?\" prima di accodare a "\\?? \".
Il campo 4 riceve informazioni sullo stato da Srdelayed. Il valore in questo campo deve essere impostato su L"NotExecuted" per un nuovo record.
Nell'esempio seguente viene fatto riferimento al file in base al percorso dell'unità. Se il percorso e il nome dell'origine sono C:\Stage\a.dll, questo record richiede che Srdelayed lo sposti in C:\temp\a.dll.
MoveFile \\?? \C:\Stage\a.dll \\?? \C:\temp\a.dll NotExecuted
Nell'esempio seguente viene fatto riferimento al file in base al percorso GUID del volume. Se il percorso e il nome dell'origine sono \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\Stage\a.dll, questo record richiede che Srdelayed lo sposti in \\?\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 per un record di file di eliminazione
Il campo 1 lo identifica come richiesta di eliminazione di un file. Il valore in questo campo è sempre L"DeleteFile" e fa distinzione tra maiuscole e minuscole.
Il campo 2 non è usato. Il valore in questo campo deve essere impostato su L"Unused".
Il campo 3 specifica il file da rimuovere. Una cartella deve essere vuota da rimuovere. Utilizzare le operazioni di eliminazione dei file per rimuovere tutti i file nella cartella prima di rimuovere la cartella. Il valore per questo campo è il percorso completo del file aggiunto a "\\?? \" a meno che il percorso non includa un identificatore univoco globale (GUID), che usa "\\?\" come prefisso. Rimuovere "\\?\" prima di accodare a "\\?? \".
Il campo 4 riceve informazioni sullo stato da Srdelayed. Il valore in questo campo deve essere impostato su L"NotExecuted" per un nuovo record.
Nell'esempio seguente viene fatto riferimento al file in base al percorso dell'unità. Se il percorso e il nome sono C:\temp\b.dll, questo record richiede che Srdelayed elimini il file.
DeleteFile inutilizzato \\?? \C:\temp\b.dll NotExecuted
Nell'esempio seguente viene fatto riferimento al file in base al GUID del volume. Se il percorso e il nome sono \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\b.dll, questo record richiede che Srdelayed rimuovesse il file.
DeleteFile inutilizzato \\?? \Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\b.dll\ NotExecuted
Formato per set short-name record
Il campo 1 identifica come richiesta di impostare il nome breve di un file. Il valore in questo campo è sempre L"SetFileShortName" e fa distinzione tra maiuscole e minuscole.
Il campo 2 specifica il nome breve.
Il campo 3 specifica il percorso e il nome lungo per ricevere il nome breve. Il valore per questo campo è il percorso e il nome lungo del file accodato a "\\?? \" a meno che il percorso non includa un identificatore univoco globale (GUID), che usa "\\?\" come prefisso. Rimuovere "\\?\" prima di accodare a "\\?? \".
Il campo 4 riceve informazioni sullo stato da Srdelayed. Il valore in questo campo deve essere impostato su L"NotExecuted" per un nuovo record.
Nell'esempio seguente viene fatto riferimento al file in base al percorso dell'unità. Se il percorso e il nome del file sono C:\temp\ShortFileName.dll, questo record richiede che il file riceva un nome breve ShortN~1.dll.
SetFileShortName ShortN~1.dll \\?? \C:\temp\ShortFileName.dll NotExecuted
Nell'esempio seguente viene fatto riferimento al file in base al GUID del volume. Se il percorso e il nome del file sono \\?\Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\ShortFileName.dll\, questo record richiede che il file riceva un nome breve, ShortN~1.dll.
SetFileShortName ShortN~1.dll \\?? \Volume{26a21bda-a627-11d7-9931-806e6f6e6963}\temp\ShortFileName.dll\ NotExecuted
Stato delle operazioni srdelayed
Srdelayed scrive la stringa L"SC=xxxxxxx" nel quarto campo di ogni record del file di testo, dove xxxxxxx è un esadecimale che indica lo stato dell'operazione richiesta. Un valore pari a zero indica che l'operazione è riuscita.
Srdelayed crea una chiave del Registro di sistema denominata SystemRestore in HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion per registrare il risultato dell'intera operazione di ripristino. Se Srdelayed esegue tutte le operazioni richieste con esito positivo, il nome RestoreStatusResult viene scritto in questa chiave con un valore zero. Se Srdelayed non è in grado di eseguire una delle operazioni richieste, i nomi RestoreStatusResult e RestoreStatusDetails vengono scritti in questa chiave con valori diversi da zero. Il nome RestoreStatusDetails viene scritto in questa chiave solo se Srdelayed non è in grado di eseguire operazioni richieste. Se un'operazione per impostare il nome breve di un file non riesce, Srdelayed continua con l'operazione successiva. Srdelayed considera critiche le operazioni di spostamento e eliminazione dei file e non continua se un'operazione di spostamento o eliminazione non riesce.