u064241 (Normal User)
Newbie
Messaggi: 5
Iscritto: 28/06/2009
|
Sono iscritto al vostro sito http://www.pierotofy.it/ che trovo interessantissimo soprattutto per me che ho iniziato da pochissimo a destreggiarmi con la programmazione in C magari, poi, evolvendo passerò a quella ad oggetti.
Faccio il sistemista e l'unione del mio mondo con quello della programmazione potrebbe essere un ottimo connubio, almeno secondo me, ho trovato i codici sorgente (vedi esempi, networking e quant’altro) utilissimi.
A questo punto mi scuso per il disturbo e vengo al punto: volevo chiedervi una consulenza di linguaggio C.
Dovrei risolvere su windows 7 (ma anche i suoi predecessori) uno dei tanti bachi che lo affliggono (http://support.microsoft.com/kb/947242) avevo pensato di scrivere due linee di codice per la gestione delle chiavi di registro solo che in C non sono previste librerie di quel genere o almeno io non le conosco.
Cercando su internet ho visto che in C++ esistono comandi per la ricerca, modifica, aggiunta, ma mastico a malapena il C figuratevi il C++, quindi avevo pensato ad un sistema più macchinoso, trattando il file testo ottenuto dalla pipe dell’esempio sottostante.
Vi spiego cosa mi servirebbe.
Con il comando da shell di dos: REG QUERY "HKLM\SOFTWARE\MICROSOFT\WINDOWS NT\CurrentVersion\profilelist" /f *.bak > KB947242.txt cerco e scrivo in un file testo le chiavi che vanno cancellate
Un esempio potrebbe essere un file di testo tipo questo:
\n --> qui c’è un a capo
HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CurrentVersion\profilelist\S-1-5-21-1528880063-3110720840-2128826722-1211.bak
Fine della ricerca: 1 corrispondenze trovate.
Sarebbe comodo cercare tutte quelle sottochiavi che hanno l’estensione .bak (da eliminare) il percorso è sempre lo stesso (HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CurrentVersion\profilelist\) cambia il nome della chiave ma non la sua estensione.
Una volta letto il file testo, sopra riportato, creerei un file batch tipo: REG DELETE "HKLM\SOFTWARE\MICROSOFT\WINDOWS NT\CurrentVersion\profilelist\S-1-5-21-1528880063-3110720840-2128826722-1211.bak" /f per eseguirlo con un system(); è macchinoso (per me) però non mi viene in mente altro.
Il miei problemi sono:
- come dico al programma di saltare la prima linea (\n) e leggere la successiva ?
- come posso prendere tutta la stringa "HKLM\SOFTWARE\MICROSOFT\WINDOWS NT\CurrentVersion\profilelist\S-1-5-21-1528880063-3110720840-2128826722-1211.bak" inserirgli REG DELETE all'inizio e /f alla fine della stringa ?
- e se le voci con estensione .bak (dopo \profilelist\) fossero più di una ?
Perdonate la richiesta banale, ma voi come lo scrivereste ?
Se poi ci sono funzioni già pronte in C++ vanno bene lo stesso.
Grazie 1000 a chiunque voglia aiutarmi.
|