| 
				
				Как физически скопировать кластера с жёсткого диска?
				 | 
 | 
| 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 
   Я не профессионал, я всего лишь любитель   Я не вредитель, я всего лишь теоретик
 |  
|   | 
 |    |