Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
1-28911
Anton Tsvilikh
2003-01-31 08:31
2003.02.10
Кнопка на рабочем столе


1-28795
romikadze
2003-02-01 13:59
2003.02.10
Масштабирование рисунка в TImage


14-29093
Kair
2003-01-25 12:50
2003.02.10
У меня вопрос


1-28700
kofman
2003-01-31 12:21
2003.02.10
Чем отличается Halt от Application.Terminate ?


1-28702
Vicheslav
2003-01-31 14:24
2003.02.10
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский