PDA

View Full Version : eseguire prog prima dell'avvio di Windows in C#


Simo F
04-10-2006, 17:12
ciao qualcuno di voi sa come si puo far eseguire un programma prima ke venga caricato Windows XP? una cosa tipo partition magic quando ti deve ridimensionare la partizione di windows e ti esegue un programmetto su sfondo blu e scritte bianke... è possibile farlo in C#?

mastoo
04-10-2006, 19:55
:D penso proprio di no ...............

mamo139
04-10-2006, 20:13
e in c/c++ è possibile invece?

andbin
04-10-2006, 20:43
e in c/c++ è possibile invece?Sicuramente sì. Però al di fuori di Windows, non hai molte possibilità: programma a 16 bit che si appoggia ai servizi DOS e/o BIOS oppure eventualmente programma a 32 bit per DOS extender. Ma dipende tutto da cosa devi fare e a che livello devi operare e su che cosa.

Simo F
05-10-2006, 13:32
Sicuramente sì. Però al di fuori di Windows, non hai molte possibilità: programma a 16 bit che si appoggia ai servizi DOS e/o BIOS oppure eventualmente programma a 32 bit per DOS extender. Ma dipende tutto da cosa devi fare e a che livello devi operare e su che cosa.

hai idea di come si potrebbe fare?

andbin
05-10-2006, 13:36
hai idea di come si potrebbe fare?Beh, intanto dovresti specificare meglio cosa vuoi fare di preciso. Hai riportato come esempio partition magic, cosa vuoi fare, un gestore di dischi??

mamo139
05-10-2006, 13:52
ad esempio per fare un semplice programma che apre e modifica un file?? magari un contatore di numero di accensioni del computer???

andbin
05-10-2006, 14:20
ad esempio per fare un semplice programma che apre e modifica un file?? magari un contatore di numero di accensioni del computer???Eh ... qui bisogna vedere! Tu vorresti "infilare" un programma nella sequenza di boot del sistema e tenere traccia del numero delle accensioni, giusto?? Bisogna vedere in che punto farlo e dove memorizzare l'informazione.

La sequenza di boot di un sistema con Win NT/2K/XP è la seguente (se mi ricordo bene):
- il BIOS legge il MBR (il primo settore fisico del disco).
- il codice nel MBR viene eseguito. Esso verifica la tabella delle partizioni e cerca se c'è una partizione "attiva".
- il settore di boot della partizione attiva viene caricato.
- il codice del settore di boot viene eseguito. Esso si occuperà di caricare ed eseguire il NTLDR (NT loader).

Da lì in poi Windows si carica.

mamo139
05-10-2006, 19:44
come boot intendi ad esempio il file boot.ini giusto??
e un programmino che deve solo modificare un file che conterrà il numero delle accensioni dove si puo inserire??? :p

ps: andbin stai diventanto la mia guida su tutte le mie frontiere della programmazione... grazie, spero di non stufarti ;)

andbin
05-10-2006, 20:20
come boot intendi ad esempio il file boot.ini giusto??
e un programmino che deve solo modificare un file che conterrà il numero delle accensioni dove si puo inserire??? :p boot.ini è il file di configurazione del boot-loader NTLDR. Puoi vedere <qui> (http://search.msdn.microsoft.com/search/Redirect.aspx?title=Boot+Options+in+a+Boot.ini+File&url=http://msdn.microsoft.com/library/en-us/DevTest_g/hh/DevTest_g/BootIni_b6707f0b-f96b-48f1-a8ff-ce2d9675dc22.xml.asp) della documentazione relativa al boot.ini.
Ma non mi sembra che si possa specificare lì dentro il nome di un "programma" da eseguire!!!

Per fare quello che dici, ci sono sicuramente diverse possibilità. Due che mi vengono in mente:

- Creare un nuovo codice per il MBR in modo che vada a scrivere l'informazione in un settore specifico del disco (uno dei primi successivi al MBR, che in genere sono liberi). Poi continua a fare il resto secondo la sequenza di boot standard.
A quel livello però, C/C++ non servono a una mazza. Serve l'assembly di brutto. E non hai alcun file-system "sotto i piedi", quindi usi solo servizi BIOS per scrivere sui settori.

- Sviluppare un servizio Win32 per i sistemi NT/2K/XP che scrive su un normale file. Un programma che funge da servizio è un programma che utilizza delle API specifiche e ha la caratteristica di essere lanciato prima ancora del logon. A quel livello hai tutto il Win32 a disposizione.

Tra l'altro la seconda soluzione l'ho sfruttata io per farmi un servizio che attualmente gira sul mio PC di casa e invece di conteggiare le accensioni, conteggia e totalizza le ore di utilizzo del sistema. ;)

ps: andbin stai diventanto la mia guida su tutte le mie frontiere della programmazione... grazie, spero di non stufarti ;) :O Nessun problema.

Lorenzo1
05-10-2006, 20:53
hai idea di come si potrebbe fare?

:rolleyes: Non penso sia una cosa semplice , anche perchè prima del boot non c'è nulla . E le prime scritte che vedi ( del boot ) quando accendi il pc sono contenute nella ROM ... Quindi in "dovresti infilare" qualcosa nella ROM che gli dica di caricare quel file che vuoi te , o le scritte :muro:
Non è semplice :mbe:

cionci
06-10-2006, 00:09
Non basta metterlo nel win.ini o nell'autoexec.bat ?

mamo139
06-10-2006, 15:42
Non basta metterlo nel win.ini o nell'autoexec.bat ?
si ma così verrebbe avviato dopo windows...

mamo139
06-10-2006, 15:43
Tra l'altro la seconda soluzione l'ho sfruttata io per farmi un servizio che attualmente gira sul mio PC di casa e invece di conteggiare le accensioni, conteggia e totalizza le ore di utilizzo del sistema. ;)

beh... mi va benissimo... nn è che mi puoi dare il sorgente visto che l'hai gia fatto??? :D

cionci
06-10-2006, 15:46
si ma così verrebbe avviato dopo windows...
No, che io sappia l'autoexec viene eseguito prima di Windows...