Главная страница
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.074 c
2-1174455382
User_OKA
2007-03-21 08:36
2007.04.08
Алгоритм


2-1173859942
iviom
2007-03-14 11:12
2007.04.08
Удаление символов из строки


4-1164101376
Cyrax
2006-11-21 12:29
2007.04.08
Оптим. организация асинхр. чтения COM-порта в отельном потоке


3-1168947590
vlad2
2007-01-16 14:39
2007.04.08
Есть ли альтернатива Paradox y?


6-1161452263
_stdcall
2006-10-21 21:37
2007.04.08
Разборка FLAP пакетов.