Форум: "Система";
Текущий архив: 2003.02.10;
Скачать: [xml.tar.bz2];
ВнизНасчет винчестера Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c