Chiave del Registro di sistema RunOnce
Tutte le versioni di Windows supportano una chiave del Registro di sistema, RunOnce, che può essere usata per specificare i comandi che il sistema eseguirà una sola volta e quindi eliminerà. La creazione di chiavi del Registro di sistema RunOnce può essere eseguita da un pacchetto driver.
Nota
La creazione di una chiave del Registro di sistema RunOnce per qualsiasi elemento diverso dai dispositivi SWENUM solo software non è conforme all'isolamento del pacchetto driver e non può essere eseguita da un driver Windows.
In Windows 8 e Windows 8.1, le voci RunOnce per l'installazione di dispositivi SWENUM solo software vengono elaborate durante l'installazione del dispositivo. Altre voci RunOnce vengono aggiunte alla chiave RunOnce . Questi vengono applicati la volta successiva che il sistema elabora la chiave RunOnce . L'installazione del dispositivo non impone al sistema di elaborare le voci RunOnce .
In Windows 7 e versioni precedenti, subito dopo l'installazione di un dispositivo, Windows esegue il comando archiviato sotto la chiave RunOnce e quindi rimuove la chiave. Inoltre, ogni volta che il sistema viene avviato, esegue il comando archiviato sotto la chiave RunOnce e quindi rimuove la chiave. Pertanto, se si inserisce un comando sotto la chiave RunOnce , non è possibile prevedere facilmente quando viene eseguito.
Subito dopo l'installazione di un dispositivo, Windows esegue il comando archiviato sotto la chiave RunOnce e quindi rimuove la chiave. Inoltre, ogni volta che il sistema viene avviato, esegue il comando archiviato sotto la chiave RunOnce e quindi rimuove la chiave. Pertanto, se si inserisce un comando sotto la chiave RunOnce , non è possibile prevedere facilmente quando viene eseguito.
Per le installazioni dei dispositivi, è possibile creare chiavi del Registro di sistema RunOnce usando le sezioni del Registro di sistema add-registry, specificate tramite le direttive INF AddReg. Ogni componente aggiuntivo-registry-section ha la sintassi seguente:
reg-root, [subkey], [value-entry-name], [flags], [value]
I valori radice del Registro di sistema (reg-root) e sottochiave per la chiave del Registro di sistema RunOnce sono i seguenti:
HKLM, "Software\Microsoft\Windows\CurrentVersion\RunOnce"
La stringa value-entry-name viene omessa da una voce del Registro di sistema RunOnce . Il tipo della voce, indicato dal valore Flags , deve essere REG_SZ (valore Flags di 0x00000000) o REG_EXPAND_SZ (valore Flags di 0x00010000). Per una voce di tipo REG_SZ (impostazione predefinita), è possibile omettere il valore Flags .
Il parametro value in una chiave RunOnce specifica il comando da eseguire. Questo parametro è una stringa tra virgolette con il formato seguente:
Rundll32[.exe] DllName,EntryPoint[Arguments]
Per impostazione predefinita, una chiave RunOnce viene eliminata dopo l'esecuzione del comando specificato. È possibile anteporre un parametro del valore della chiave RunOnce con un punto esclamativo (!) per rinviare l'eliminazione della chiave fino a quando il comando non viene eseguito correttamente. Senza il prefisso del punto esclamativo, se il comando specificato non riesce, la chiave RunOnce verrà comunque eliminata e il comando non verrà eseguito alla successiva avvio del sistema.
Inoltre, per impostazione predefinita, le chiavi RunOnce vengono ignorate quando il sistema viene avviato in modalità provvisoria. Il parametro value delle chiavi RunOnce può essere preceduto da un asterisco (*) per forzare l'esecuzione del comando anche in modalità provvisoria.
Quando si crea una voce di stringa di valore , tenere presenti le linee guida seguenti:
Rundll32 può essere visualizzato con o senza l'estensione del nome file .exe.
DllName è il percorso completo di un'immagine DLL o eseguibile. Ad eccezione di una virgola di terminazione obbligatoria, l'espressione non deve altrimenti contenere virgole. Se non viene specificata alcuna estensione di file, l'estensione predefinita è .dll.
EntryPoint è il nome del punto di ingresso all'interno della DLL indicata da DllName.
Gli argomenti sono una sottostringa facoltativa che contiene tutti gli argomenti che devono essere passati alla DLL specificata.
Esattamente uno spazio deve separare la stringa EntryPoint dalla sottostringa Arguments .
L'esempio di codice seguente mostra la voce add-registry-section che archivia un comando e i relativi argomenti sotto la chiave RunOnce :
;; WDMAud swenum install
HKLM,%RunOnce%,"WDM_WDMAUD",,\
"rundll32.exe streamci.dll,StreamingDeviceSetup %WDM_WDMAUD.DeviceId%,%KSNAME_Filter%,%KSCATEGORY_WDMAUD%,%17%\WDMAUDIO.inf,WDM_WDMAUD.Interface.Install"
[Strings]
RunOnce = "SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce"
WDM_WDMAUD.DeviceId = "{CD171DE3-69E5-11D2-B56D-0000F8754380}"
KSNAME_Filter = "{9B365890-165F-11D0-A195-0020AFD156E4}"
KSCATEGORY_WDMAUD = "{3E227E76-690D-11D2-8161-0000F8775BF1}"
Quando si usano le chiavi del Registro di sistema RunOnce per le installazioni di dispositivi, si applicano le regole seguenti:
Queste chiavi del Registro di sistema devono essere usate solo per le installazioni di dispositivi solo software enumerati da SWENUM, l'enumeratore di dispositivi software.
Le chiavi RunOnce devono essere costituite solo da chiamate a Rundll32.exe. In caso contrario, WHQL non firmerà digitalmente il pacchetto driver.
Il codice da eseguire non deve richiedere l'input dell'utente.
Le installazioni lato server sono eseguite in un contesto di sistema. Per questo motivo, è necessario essere certi che il codice da eseguire non contenga vulnerabilità di sicurezza e che le autorizzazioni dei file impediscono che il codice venga modificato in modo dannoso.
A partire da Windows Vista, il sistema non eseguirà i comandi specificati dalle chiavi RunOnce se un utente senza privilegi di amministratore è connesso al sistema. Ciò potrebbe causare installazioni incomplete o danneggiate dopo un riavvio del sistema.
Prima che l'applicazione di installazione del dispositivo crei le voci RunOnce, informa l'utente corrente che un utente con privilegi di amministratore deve accedere dopo un riavvio del sistema.
Per altre informazioni, vedere Sviluppo di applicazioni eseguite all'accesso in Windows Vista.