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

Вниз

Насчет винчестера   Найти похожие ветки 

 
X-shadow ©   (2002-12-08 06:23) [0]

Люди у меня вопросс. Я делаю дисковую утилиту и мне надо убрать боу сектор с винта причем из виндовоса. Заранее спасибо


 
X-shadow ©   (2002-12-08 07:16) [1]

Люди вам сложно чтоли?Плиз


 
Nick_N_A ©   (2002-12-08 07:39) [2]

Под Dos - можно, а винда такая гадость, что блокирует прямой доступ, можно конечно использывать СHS, но тут же стает проблема 8-ми гигабайт


 
Ihor Osov'yak ©   (2002-12-08 16:22) [3]

2 Nick_N_A © (08.12.02 07:39)

для дос - есть Int13Ext, там ограничение 8 гиг снято..


2: X-shadow © (08.12.02 07:16)

В общих чертах (для вин):

- пишем движок прямого доступа к hdd
- разбираемся со структурой файловой системы (для fat16/32 реально, для ntfs - проблематично ввиду некой закрытости информации о структуре, для всяких xNIX промолчу ввиду собственной некомпетентности)
- решаем задачу ...

Но, имхо, себестоемость решения задачи для fat16/32 может быть в районе четырехзначной цифры, не в рублях и гривнях конечно..
Для NTFS в несколько раз побольше... Для xNIX снова молчу ...

ЗІ. Так что наверно нужно бросить эту затею ...






 
X-shadow ©   (2002-12-08 17:35) [4]

А програмно ( в смысле в Delphi )


 
X-shadow ©   (2002-12-08 22:10) [5]

unit main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, hexdump, Buttons, int13ext;

type
TForm1 = class(TForm)
Notebook1: TNotebook;
Label1: TLabel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Edit1: TEdit;
Label2: TLabel;
ListBox1: TListBox;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
HexDump: THexDump;
procedure readsector;
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;
secbuf: array[0..511] of byte;
drivetable: array[0..25] of byte;
currSec: longint;
currDrv: integer;
currDriveparams: TDriveParams;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
HexDump := CreateHexDump(TWinControl(NoteBook1.Pages.Objects[0]));
{Hexdump.font.name:="FixedSys";
Hexdump.font.size:=7;}
currSec:=0;
currDrv:=0;
end;


procedure TForm1.FormActivate(Sender: TObject);
var
i: integer;
dp: TDriveParams;
sinfo: string;
ssize: string;
size: real;
tableindex: integer;
begin
ListBox1.items.clear;
tableindex:=0;
for i:=0 to 255 do
begin
if GetDriveParams(i, @dp) then
begin
drivetable[tableindex]:=i; inc(tableindex);
size:=dp.physSecLO / 2048;
if size < 1000 then
ssize:=Format("%f MB)",[size])
else
ssize:=Format("%f GB)",[size / 1024]);
if dp.infoflags AND IFLAG_REMOVABLE<>0 then
sinfo:="Removable Disk ("+ssize
else
sinfo:="Fixed Disk ("+ssize;
listbox1.items.add(sinfo);
end;
end;

HexDump.Address := @secbuf;
HexDump.DataSize := 512;
hexdump.currentline:=0;
end;

procedure TForm1.readsector;
begin
edit1.text:=inttostr(currSec);
if not ExtendedRead(currDrv, currSec, 1, @secbuf) then
begin
MessageDlg("Error reading drive", mtInformation, [mbOk], 0);
end;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if currSec < currDriveParams.physsecLO then inc(currSec);
readsector;
hexdump.refresh;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
if currSec > 0 then dec(currSec);
readsector;
hexdump.refresh;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
i: integer;
dp: tdriveparams;
begin
currDrv:=drivetable[listbox1.itemindex];

GetDriveParams(currDrv, @currDriveParams);
currSec:=0;
readsector;
hexdump.refresh;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
t:integer;
begin
for t:=0 to 511 do
secbuf[t]:=0;
ExtendedWrite(currdrv,currsec,1,@secbuf,false);
end;

end.


 
Ihor Osov'yak ©   (2002-12-08 23:05) [6]

> int13ext;


Молодец. Умеете тори пользовать.

Но: этот компонент слегка глючен. Под win9x и nt несколько по разному интерпритирует номер драйва. Если мне не изменеяет память, под nt 0 соотв. c:, для 98 - a:. Но за основу брать можно. Второе - есть неочевидная ошибка в vxd, вследствие которой больше чем 4 сектора за раз читать-писать не будете ...

В третьих:
> убрать боу сектор

Я на основании этого словосочетания решил, что Вас интересует "ремонт", то есть отметка битых секторов как недоступных под активной виндой -> перестрока фат и пд и тп. И как следствие моя оценка. Впредь более точно формируйте вопрос.

Но: похвально, что самостоятельно нашли решение.

ЗЫ. Здесь есть тенденция на вопросы по прямому доступу к диску ответов полностьюне давать (аргументация - нечего писателям троянов помагать, а знающий человек и сам разберется на основании легкой наводки или найдет готовое решение, что Вы собственоо и подтвердили)....









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

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

Наверх




Память: 0.49 MB
Время: 0.027 c
7-29115
D.V.K
2002-11-28 15:34
2003.02.10
Как ускорить чтение и обработку данных из больших файлов


3-28614
helpme
2003-01-23 05:00
2003.02.10
В таблице FoxPro при открытии в Делфи вместо русских символов


14-29016
Andy BitOff
2003-01-23 14:01
2003.02.10
Какую книгу купить?


14-29012
BF7ru
2003-01-23 13:45
2003.02.10
Копирование CD-DA


7-29134
MSAlex
2002-12-08 15:00
2003.02.10
Floppy