[Articolo] Modificare il registro di sistema in Windows

Oggi parliamo del registro di Windows, e in quali modi è possibile modificarlo (con particolare attenzione agli script reg e batch).

Difficoltà articolo (0->10): 5

Oggi parliamo del registro di Windows, e in quali modi è possibile modificarlo (con particolare attenzione tramite gli script).

Da wikipedia, il registro di sistema “è una base di dati in cui sono custodite le opzioni e le impostazioni di un sistema operativo di tipo Microsoft Windows, e di tutte le applicazioni installate. Il concetto di registro di sistema è strettamente legato alla logica dei sistemi operativi Microsoft, che conservano tutte le proprie impostazioni in un numero ristretto di file.” Dunque, è quella porzione del sistema operativo in cui sono custodite tutte le impostazioni più importanti del sistema, e con le quali è fondamentale fare attenzione.

Vediamo adesso come possiamo apportare modifiche a tale registro, che possono essere manuali oppure automatiche, nel caso in cui usassimo degli script per automatizzare le operazioni.

Il caso più semplice è quando dobbiamo modificare una chiave di registro  o comunque un numero ridotto di chiavi. In tal caso possiamo farlo direttamente aprendo il registro con il comando REGEDIT. Per aprire l’editor premere i tasti WIN+R, che comporterà l’apertura di questa finestra:

Run, window, command, Windows, start, launch, open

Adesso, dobbiamo inserire il comando REGEDIT, e ci verrà mostrato il registro di sistema, all’interno del quale possiamo ricercare la chiave/chiavi di nostro interesse.

E’ anche possibile modificare le chiavi di registro usando il comando REG, richiamabile dal prompt dei comandi (CMD), e la sua sintassi è consultabile con “REG /?”.

Per modificare le chiavi di registro tramite script invece ci sono 2 modi:

  1. Script di tipo reg, con estensione .reg.
  2. Script batch, con estensione bat.

Uno script di tipo reg, è un file che ha estensione di sistema .reg, ed è un file testuale che deve contenere necessariamente chiavi di registro. Un particolarità che con un file .reg non possiamo cancellare singoli valori ma solo le chiavi, a differenza di un file batch.  Inoltre, con un file reg non riceveremo errore se qualcosa dovesse andare storto durante la sua esecuzione, mentre con un file batch ci verrà restituito sempre un errore in caso di qualche problema

Passando alla sintassi che deve avere un file reg, vediamo che è necessario mettere tra le quadre [] il percorso della posizione di registro da modificare e nella riga dopo il nome della chiave tra apici doppi, quindi il carattere uguale (=), il tipo di valore , il carattere dei due punti (:) , ed infine il valore della chiave. E’ un’eccezione il tipo stringa, per cui non è necessario specificare il tipo ed è invece sufficiente inserire tra apici doppi il valore stesso. Vediamo un elenco delle varie possibilità:

  • “Valore”=”stringa” per i valori di tipo REG_SZ
  • “Valore”=dword:stringa per i valori di tipo REG_DWORD
  • “Valore”=hex:stringa per i valori di tipo REG_BINARY
  • “Valore”=hex(2):stringa per i valori di tipo REG_EXPAND_SZ
  • “Valore”=hex(7):stringa per i valori di tipo REG_MULTI_SZ

Dunque, per i valori REG_SZ e REG_DWORD è pensabile inserire a mano i valori, mentre potrebbe diventare non proprio fattibile farlo per i valori REG_BINARY, REG_MULTI_SZ e REG_EXPAND_SZ.

Di seguito vediamo un esempio di file .reg:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Control Panel\Desktop]

“MenuShowDelay”=”100”

“ForegroundFlashCount”=dword:00000003

“UserPreferencesMask”=hex:b0,12,01,80

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]

“AppData”=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,\

4c,00,45,00,25,00,5c,00,44,00,61,00,74,00,69,00,20,00,61,00,70,00,70,00,6c,\

00,69,00,63,00,61,00,7a,00,69,00,6f,00,6e,00,69,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]

“PagingFiles”=hex(7):45,00,3a,00,5c,00,70,00,61,00,67,00,65,00,66,00,69,00,6c,\

00,65,00,2e,00,73,00,79,00,73,00,20,00,33,00,38,00,34,00,20,00,35,00,31,00,\

Quanto appena visto si può anche scrivere in modo maggiormente leggibile con un file .bat nel seguente modo:

REG ADD “HKCU\Control Panel\Desktop” /t REG_SZ /v MenuShowDelay /d 100 /f

REG ADD “HKCU\Control Panel\Desktop” /t REG_DWORD /v ForegroundFlashCount /d 3 /f

REG ADD “HKCU\Control Panel\Desktop” /t REG_BINARY /v UserPreferencesMask /d b0120180 /f

REG ADD “HKCU\”Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders” /t REG_EXPAND_SZ /v AppData /d “%USERPROFILE%\Dati Applicazioni” /f

REG ADD “HKLM\”SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management” /t REG_MULTI_SZ /v PaginFiles /d “E:\pagefile.sys 384 512” /f

Faccio notare, che il parametro f alla fine di ogni riga sovrascrive le voci senza chiedere conferma.

roghan

Utility Java per convertire numeri esadecimali

Ho realizzato in Java una piccola utility da linea di comando che effettua la conversione di un numero decimale in uno esadecimale e viceversa. Prima di vedere come utilizzarla, vediamo brevemente cos’è un numero esadecimale, per chi non lo ricordasse ;-).

Da wikipedia: “Il sistema numerico esadecimale (spesso abbreviato come esa o hex) è un sistema numerico posizionale in base 16, cioè che utilizza 16 simboli invece dei 10 del sistema numerico decimale tradizionale. Per l’esadecimale si usano in genere simboli da 0 a 9 per le prime dieci cifre, e poi le lettere da A a F per le successive sei cifre, per un totale di 16 simboli.”
[…]

Ho realizzato in Java una piccola utility a linea di comando che effettua la conversione di un numero decimale in uno esadecimale e viceversa. Prima di vedere come utilizzarla, vediamo brevemente cos’è un numero esadecimale, per chi non lo ricordasse ;-).

Da wikipedia: “Il sistema numerico esadecimale (spesso abbreviato come esa o hex) è un sistema numerico posizionale in base 16, cioè che utilizza 16 simboli invece dei 10 del sistema numerico decimale tradizionale. Per l’esadecimale si usano in genere simboli da 0 a 9 per le prime dieci cifre, e poi le lettere da A a F per le successive sei cifre, per un totale di 16 simboli.

Nella seguente tabella è visibile la conversione da decimale a esadecimale a binario.

Ad esempio, se abbiamo il numero esadecimale 1F5A, possiamo effettuare la conversione in decimale nel seguente modo: (1 x 16^3) + (15 x 16^2) + (5 x 16^1) + (10 x 16^0) = 8026. Inoltre, spesso un numero esadecimale viene indicato anteponendo al numero 0x, specialmente nei sistemi Unix-like, diventando ad esempio 0x1F5A.

Nel momento in cui l’utility viene avviata con il comando HCT (acronimo di Hex Conversion Tool, la classe che contiene il main), viene fornito il seguente menu:

$ java HCT
                       _____________________________
                      /                             \
                     |      Hex Conversion Tool      |
                     |             v1.0              |
                      \_____________________________/

            [ Matteo Cappelli aka roghan | matcap83@libero.it ]

[ Options ]
 1 - convert decimal to hex
 2 - convert hex to decimal
 3 - exit

Choose an option:
|

L’utility, con la relativa documentazione javadoc, è scaricabile dal seguente link:

roghan