Как физически скопировать кластера с жёсткого диска?
|
|
Neo | Дата: Четверг, 19.05.2011, 14:47 | Сообщение # 1 |
Модератор
Зарегистрирован: 04.05.2010
Группа: Модераторы
Сообщений: 317
Статус: Offline
| Всем Привет!Люди,может кто-нибудь знает как с помощью Delphi физически скопировать кластера с жёсткого диска,например как это делает WinHex.Вообще-то я хочу скопировать sam/system.Я видел коды с Wasma,но они на C и (лично у меня) не работают.Может кто чего посоветует?
|
|
| |
dolphin | Дата: Четверг, 19.05.2011, 15:56 | Сообщение # 2 |
Администратор
Сообщений: 906
Статус: Offline
| Что за файлы? Где лежат? Желательно под семёркой, для актуальности.
Система: Windows 10 x64, Kali Linux Среды программирования: Delphi 7, Delphi 10.x
Я не профессионал, я всего лишь любитель Я не вредитель, я всего лишь теоретик
|
|
| |
Neo | Дата: Четверг, 19.05.2011, 16:43 | Сообщение # 3 |
Модератор
Зарегистрирован: 04.05.2010
Группа: Модераторы
Сообщений: 317
Статус: Offline
| Лежат они :windows\system32\config,думаю,вы уже поняли что это и зачем они мне....
|
|
| |
C@T | Дата: Четверг, 19.05.2011, 17:10 | Сообщение # 4 |
Авторитетный
Зарегистрирован: 06.03.2010
Группа: Модераторы
Сообщений: 265
Статус: Offline
| я уже когдато писал Code f1 := CreateFileA('\\.\PhysicalDrive0',GENERIC_ALL,FILE_SHARE_WRITE + FILE_SHARE_READ,0,OPEN_EXISTING,0,0); buf := NewLoader;//заполняем буфер WriteFile(f1,buf,512,nw,0); CloseHandle(f1); меняеш WriteFile(f1,buf,512,nw,0); на ReadFile(f1,buf,512,nw,0); и для указания нужного смещения на винте(в байтах) юзай SetFilePointer
|
|
| |
Neo | Дата: Четверг, 19.05.2011, 17:41 | Сообщение # 5 |
Модератор
Зарегистрирован: 04.05.2010
Группа: Модераторы
Сообщений: 317
Статус: Offline
| А как тогда определить в каком именно секторе находится sam,чтобы потом его скопировать?
|
|
| |
dolphin | Дата: Четверг, 19.05.2011, 20:18 | Сообщение # 6 |
Администратор
Сообщений: 906
Статус: Offline
| Вот пример Доступно только для пользователей Но дело в вот ещё в чём, видимо придётся читать за один подход буфера. Т.е. бт должно быть равно размеру файла.
Система: Windows 10 x64, Kali Linux Среды программирования: Delphi 7, Delphi 10.x
Я не профессионал, я всего лишь любитель Я не вредитель, я всего лишь теоретик
|
|
| |
Neo | Дата: Суббота, 21.05.2011, 09:04 | Сообщение # 7 |
Модератор
Зарегистрирован: 04.05.2010
Группа: Модераторы
Сообщений: 317
Статус: Offline
| F1:=CreateFile('C:\Windows\system32\config\sam',GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,0,0); F2:=CreateFile('D:\sam',GENERIC_WRITE,FILE_SHARE_WRITE,nil,CREATE_ALWAYS,0,0); Я так попробовал,но,интересно,что sam копируется,но не открывается потом samInsidом.И в зависимости от бт,скопированный Sam весит то 400,то ещё как нибудь kb,хотя родной sam у меня 256 кб.....Как же всё-таки его рабочим скопировать?
|
|
| |
dolphin | Дата: Суббота, 21.05.2011, 12:12 | Сообщение # 8 |
Администратор
Сообщений: 906
Статус: Offline
| Сначала узнай размер, потом скопируй за один перенос буфера размером с файл.
Система: Windows 10 x64, Kali Linux Среды программирования: Delphi 7, Delphi 10.x
Я не профессионал, я всего лишь любитель Я не вредитель, я всего лишь теоретик
|
|
| |