Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];

Вниз

Как прочитать загрузочный сектор 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.983 c
2-1174044399
Vas
2007-03-16 14:26
2007.04.08
Столбци


3-1169154513
ancot
2007-01-19 00:08
2007.04.08
Глюк FieldByName()


15-1173460202
Zhjaeve
2007-03-09 20:10
2007.04.08
Касательно языка


1-1171121236
Observer
2007-02-10 18:27
2007.04.08
Asm and Delphi


15-1173851580
Mozart
2007-03-14 08:53
2007.04.08
Непонятный сбой Excel...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский