Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.08;
Скачать: CL | DM;

Вниз

Как прочитать загрузочный сектор HDD   Найти похожие ветки 

 
images   (2007-03-17 23:49) [0]

Подскажите пожалуйста как можно под Windows XP Pro можно прочитать загрузочный сектор диска NTFS. Пробовал пример из DRKB (CreateFile, ReadFile), но получаю сообщение "Процесс не может получить доступ к файлу, так как этот файл занят другим процессом".


 
koha ©   (2007-03-18 18:30) [1]

Если переведешь в из 32х разрядную систему, то вот готовый код, другого врятли кто даст

DataPack DB DUP (0);

mov AH, 41h;
mov BX, 55AAh;
mov DL, 80h;
int13h;
jc NO_SUPPORT;
cmp BX, 55AAh;
jne ERROR_END;
mov [DataPack],16;
mov [DataPack+2],1;
mov[word ptr DataPack +4], off set DataSector
mov AX, DS
mov [DataPack+6], AX;

mov [dword ptr DataPack + 8],0
mov [dword ptr DataPack + 12],0
mov AH, 42h;
mov DL, 80h;
mov SI, offset DataPack;
int 13h;


 
MikePetrichenko ©   (2007-03-18 19:30) [2]


> Подскажите пожалуйста как можно под Windows XP Pro

И вот это убило


> int 13h;


А размонтировать файловую систему кто за тебя будет? Подумай, почему chkdsk имеет ключ /X а также при выполнении chkdsk C: /f требует перезагрузки? (С: в данном случае загрузочный диск с осью)


 
DrPass ©   (2007-03-18 23:48) [3]


> Если переведешь в из 32х разрядную систему

А если не переведешь? :)


 
Игорь Шевченко ©   (2007-03-19 12:36) [4]


> Подскажите пожалуйста как можно под Windows XP Pro можно
> прочитать загрузочный сектор диска NTFS


var
 FileName : String;
 FileMode : Cardinal;
 FSectorBuffer : array[0..511] of Char;
begin
 FileName := "\\.\PhysicalDrive"+IntToStr(FDriveNo);
 if FOpenForWriting then
   FileMode := GENERIC_WRITE
 else
   FileMode := GENERIC_READ;
 FHandle := CreateFile(PChar(FileName), FileMode,
   FILE_SHARE_WRITE or FILE_SHARE_READ, nil,
   OPEN_EXISTING, 0, 0);
 if FHandle = INVALID_HANDLE_VALUE then
   RaiseLastWin32Error();

 ReadFile(FHandle, FSectorBuffer, SizeOf(FSectorBuffer), ReadBytes, nil);
 if ReadBytes <> SizeOf(FSectorBuffer) then
   RaiseLastOSError();


 
koha ©   (2007-03-19 20:27) [5]

Какой код клёвый!
А я когда - то, когда еще Дос юзал все пытался на ассемблере делать,
потом руками из книги модуль готовый подрезал у Фаронова (Turbo Pascal7 - 2ч.), который все почти умеет, а вот в делфи не очень то у же понимаю все эти вещи как делать...
C дуру было чуть дравер не сел писать.



Страницы: 1 вся ветка

Текущий архив: 2007.04.08;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.046 c
15-1173122947
DeadMeat
2007-03-05 22:29
2007.04.08
64 битная *.dll


11-1154698752
tigr
2006-08-04 17:39
2007.04.08
KOLIndy


15-1173711497
Kerk
2007-03-12 17:58
2007.04.08
Perl


15-1173882328
eXPell
2007-03-14 17:25
2007.04.08
Как бы вы поступили?


1-1171423401
GuV
2007-02-14 06:23
2007.04.08
Создание ComboBox с нуля