AutoRun in Windows
R. Gallo
ITIS “A. VOLTA” GUIDONIA
Ottobre 2009
Abstract
Costruire un Autorun in Windows. VERSIONE PRELIMINARE
1
Premessa
Quando con l’uscita di Windows95 gli utenti inserendo un cd nel lettore, una
procedura partiva per eseguire un programma registrato su cd, molta fu la
meraviglia da parte degli utenti e molti cominciarono a studiare come il sistema
operativo riuscisse in una impresa del genere. Fortunatamente realizzare un
autorun non é un lavoro complesso, ma un utile esercizio per prendere contatto
con le funzionalitá di questo.
2
Casa serve per costruire un Autorun
Per realizzare la funzione descritta nella (1), non é sufficiente scrivere un programma. Si devono studiare alcuni componenti del sistema operativo come
1. valore del registro di sistema che abilitá funzione autorun sulle periferiche
2. script di sistema per scrivere istruzioni base contenute in un autorun
3. programma P che viene richiamato da autorun
4. file di supporto per far funzionare il programma P
Molte di queste componenti, descrivono caratteristiche particolari di Windows
e quindi questa guida é valida per gli autorun che funzionano solo sotto questo
sistema. Per Linux o MacOSx non si applica.
2.1
Autorun su CDROM
In fase di sviluppo di un autorun si deve risolvere un problema importante.
Poiché la periferica che per default ha attivo l’autorun é il cdrom, come si
puó fare il debug della nostra procedura senza dover ogni volta scrivere su un
1
cd che in caso di fallimento, risulterebbe poi inutilizzabile? La soluzione sta
nell’abilitare la funzione autorun su periferiche diverse dal cdrom, ad esempio
su floppy o su pen-drive usb, in modo da avere un supporto magnetico sul
quale riscrivere piú volte senza sprecarlo. Per far questo si deve intervenire sul
Registro di Sistema, come spiegato nel paragrafo successivo
3
Autorun e il registro di sistema
Il sistema operativo Windows conserva tutti i suoi parametri di configurazione
in un file registrato nella cartella \windows\system32. Questo file prende il
nome di Registro di Sistema. Oltre a conservare i parametri di funzionamento di Windows, il registro conserva anche tutti i valori di configurazione
delle applicazioni installate sul PC. Tra questi parametri di configurazione, ve
ne sono molti che regolano il funzionamento delle periferiche, la visualizzazione
del desktop, la gestione delle finestre etc. Per fare un esempio, i parametri di
configurazione del desktop come lo sfondo, i colori, la dimensione dei caratteri,
la distanza fra le varie icone, la dimensione dello schermo, sono tutti valori salvati nel registro di sistema. Come detto in (2) anche l’autorun registra i suoi
valori nel registro di sistema. Due sono i valori di interesse
1. verificare che autorun sia abilitato nel sistema
2. verificare quale periferica ha l’autorun abilitato
Per alcuni utenti la funzione di autorun é fastidiosa quindi non vuole che inserendo il cd nel drive o collegando una pen-drive parta in automatico il programma registrato. Disattivare questa funzione ha poi un peso molto importante
per la sicurezza, in quanto il programma che parte potrebbe essere infetto da
virus, con tutti i problemi che ció comporta.
3.1
Il Registro di Sistema
Per accedere al registro di sistema si usa un programma chiamato regedit. Il
registro si presenta sotto forma gerarchica con cinque categorie principali. Alcune categorie sottendono al funzionamento dell’interfaccia con l’utente. Altre
forniscono valori per il kernel, la rete, la gestione della memoria e del file system. Il registro di sistema contiene dati molto importanti e sensibili, é quindi
ottima norma fare una copia di backup prima di procedere a modifiche. Errate
impostazioni del registro portano al malfunzionamento del sistema e, con molta
probabilitá, porta alla riformattazione del PC. Ciascuna delle categorie del registro a sua volta si suddivide in altre sezioni e ogni sezione contiene varie chiavi.
Le chiavi sono valori binari, esadecimali o stringhe. Le chiavi che ci interessano
per l’autorun sono
1. \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cdrom\AutoRun
2. \HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\
\Policies\Explorer\NoDriveTypeAutoRun\
2
DRIVE-TYPE
DRIVE_UNKNOWN
DRIVE_NO_ROOT_DIR
DRIVE_REMOVABLE
DRIVE_FIXED
DRIVE_REMOTE
DRIVE_CDROM
DRIVE_RAMDISK
BIT-MASK
1
2
4
8
16
32
64
BIT
0
1
2
3
4
5
6
Table 1: Drive Type Autorun
Il valore della prima chiave (AutoRun) indica se é attiva la partenza automatica
per il cdrom. La seconda chiave (NoDriveTypeAutoRun) indica quali periferiche
hanno autorun attivo. La chiave é di tipo REG_BINARY ed é grande 4 byte. Ogni
bit del primo byte formano la cosiddetta maschera (bit-mask) che indica quali
periferiche hanno attivo autorun, secondo la tabella (1) Il valore di default é 145d
= 91h . Ogni bit posto a 1 indica che quella periferica ha l’autorun disabilitato.
Il bit 7 é sempre posto a 1. Si lascia come esercizio stabilire con il valore di 145d
quale periferiche hanno l’autorun abilitato
4
Autorun.inf
Dopo aver controllato le chiavi di sistema ed esserci assicurati che una periferica
magnetica abbia abilitato l’autorun, passiamo ad analizzare il 2 punto del paragrafo (2). Quando il sistema si accorge che una periferica é stata inserita nel
drive (ad esempio una pen-drive usb) comunica con questa e poiché l’autorun
é attivo, cerca un file particolare che si chiama autorun.inf. In questo file
sono scritte poche istruzioni che servono per far partire l’applicazione di nostro
interesse. Il file é composto da queste parti
1. defaulticon: percorso e nome file dell’icona da mostrare nel caso icon
non sia presente
2. icon: nome file icona presente nulla stessa directory
3. open: percorso e nomefile del programma da far partire
4. shell: percorso e nome file da far partire se si preme il tasto destro del
mouse sull’icona della periferica per avere aiuto
5. shell/comm: collegamento, presente nel menu contestuale, al comando
shell precedente
Un esempio di script per autorun.inf puó essere il seguente. Il file si puó scrivere con editor di testo come notepad, ma quando si salva ricordarsi di dare
esattamente il nome autorun.inf (l’estensione é importante).
3
[autorun]
icon = readme.bmp
OPEN=word documento.doc
shell\readit\command=notepad readme.txt
shell\readit=Read &Me
La periferica con questo autorun mostra l’icona definita nella sezione icon, fa
partire il programma word che apre documento.doc e se si preme sul tasto destro sull’icona del drive, viene mostrato il menu ReadMe che se premuto apre il
file Readme.txt per dare indicazioni di aiuto. Il file icon.bmp, readme.txt sono
registrati sulla periferica; word e notepad sono sul disco rigido, ma il sistema
deve conoscere il percorso dove rintracciare i programmi e farli partire. E’ consigliabile, per le prime volte, tenere tutti i file sulla periferica e non complicare
la gestione dell’autorun. Un altro esempio di autorun puǿessere
[autorun]
icon = icon.ico
OPEN=index.html
In questo caso la sezione open contiene un file html. Il file poiché possiede
l’associazione con Internet Explorer o Firefox viene aperto nel browser. Per
concludere l’ultimo esempio
[autorun]
icon = myapp.ico
OPEN=.\exe\myapp.exe
shell\readit\command=notepad readme.txt
shell\readit=Read &Me
In questo caso l’autorun fa partire l’applicazione proprietaria presente nella
cartella exe della periferica. Se si preme il tasto destro parte notepad che apre
readme.txt. In questo caso tutti i file: myapp.ico, myapp.exe, readme.txt sono
sviluppati dal programmatore e copiati sulla periferica
5
Programma di partenza
L’utente che voglia scrivere una propria applicazione richiamata in autorun,
deve gestire diversi aspetti:
1. il programma o il file che parte trova applicazione associata cercando nel
pathname
2. l’applicazione associata é giá installata su hard disk
3. l’applicazione é stand-alone su cdrom
4. l’autorun deve funzionare da qualsiasi supporto sul quale é abilitato
4
Nel caso l’intera applicazione possa essere contenuta sul cd, si preferisce scrivere un programma stand-alone che trova sul supporto, tutti i file di dipendenza
che servono. Se per altro motivo, come applicazione troppo grande per essere
contenuto su un solo cd, file giá installati su hard-disk, specifiche richieste dal
prodotto oppure si vuole rendere la procedura piú flessibile, si ricorre a una
soluzione diversa. Un piccolo programma sviluppato in VC++ (ma qualunque
altro linguaggio va bene) viene richiamato durante l’autorun. Questa applicazione fa da filtro e si occupa di:
1. verifichi quante e quali periferiche sono collegate al sistema (floppies, porte
usb, lettori-masterizzatori cdrom/dvd) tramite la API (Application Program Interface) GetDriveType
2. se si deve aprire un file che non sia un exe, trovi l’applicazione associata
al file in questione, per esempio
(a) index.ppt file di prowerpoint
(b) index.htm file aperto in browser
(c) index.doc file aperto da word
La funzione API usata é FindExecute
3. attivi l’applicazione associata con API ShellExecute passandogli come
parametro il file da aprire
Per la spiegazione delle API si rimanda all’help MSDN associato al sistema di
sviluppo.
5.1
Osservazioni
Scrivere il programma-filtro in VC++ offre questi vantaggi. L’applicazione parte
su tutti i PC indifferentemente, in quanto i file di dipendenza (ad esempio le API
viste in precedenza) sono installate per default nella dir \windows\system32.
Al contrario usare un linguaggio diverso puó comportare prima, l’installazione
di file di supporto. La funzione ShellExecute accetta in ingresso anche un URL,
(collegamento Inet) con relativa azione di apertura della pagina nel browser.
5