Witam,
jak wiadomo rejestr systemu Windows XP sklada sie z kilku plikow, ktore w momencie uruchamiania/logowania uzytkownika lacza sie w jedna calosc i tworza rejestr. Lokalizacje poszczegolnych plikow mozna znalezc w kluczu HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\HiveList. HiveList zawiera wpisy lokalizację katalogu rejestru (nazwa wpisu) oraz fizyczną lokalizację katalogu (jako wartość wpisu).
Jednak przy probie odczytania tego pliku (oczywiscie mowa o programie uruchamianym z konta administratora), pojawia sie problem... Funkcja good() zwraca false. Zgodnie z dokumentacja - zwraca ona taka wartosc w przypadku, kiedy plik nie istnieje na dysku lub gdy brak jest uprawnien do otwarcia tego pliku...
Ponizej przedstawiam fragment kod, ktory uzylem:
fstream plik("\Device\HarddiskVolume1\Documents and Settings\LocalService\NTUSER.DAT",std::ios::in|std::ios::binary);
fstream plik1("c:/rejestr1.dat",std::ios::out|std::ios::binary);
if (plik.good()==0)
{
printf("ZONK");
getch();
}
plik.seekg (0, ios::end);
int length = plik.tellg();
plik.seekg (0, ios::beg);
char *buffer = new char [length];
plik.read (buffer,length);
cout.write (buffer,length);
plik1.write(buffer,length);
plik.close();
plik1.close();
plik.write (buffer,length);
delete[] buffer;
Kod oczywiscie jak na razie tylko prowizoryczny - praktycznie bez zadnych zabezpieczen.
Moje pytanie jest takie - w jaki sposob skopiowac (chodzi glownie o odczyt, bo jesli bedzie w buforze, to po problemie) taki plik. Czy obedzie sie bez wstawki asemlerowej? Bo z asemblerem stoje jak na razie srednio. A moze ktos wrzuci kod w asemblerze, ktory zrobilby te robote. Moze jakies inne pomysly...
Bede wdzieczny za kazda podpowiedz.
Pozdrawiam.