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

Вниз

DeviceIOControl + IOCTL_Disk_Format_Tracks_Ex   Найти похожие ветки 

 
Dimaxx ©   (2003-11-15 13:30) [0]

Хочу отформатировать дискеты в нестандартном формате под ХР. Раньше под ДОСом форматировал с помощью FFormat 2.29f и все нормально работало, но теперь из-за большой скорости проца на этой проге выскакивает ошибка 200. Поменять значения в модуле CRT для исправления этой ошибки, как многократно рекомендовалось, нет возможности - там искомая последовательность не встречается.

Залез на MSDN, взял все, что нужно. Но мне не понятны назначения полей FormatGapLength и SectorNumber в структуре FORMAT_EX_PARAMETERS. Привожу описание из MSDN по этим двум параметрам:

FormatGapLength - Length of the gap between two successive sectors on a track.
SectorNumber - Array of WORD values specifying the sector numbers of the sectors to be included in the track to be formatted.

Теперь пример кода, который я написал:

type
TMediaType = (Unknown,F5_1Pt2_512,F3_1Pt44_512,F3_2Pt88_512,F3_20Pt8_512,
F3_720_512,F5_360_512,F5_320_512,F5_320_1024,F5_180_512,
F5_160_512,RemovableMedia,FixedMedia);

TFormatParametersEx = packed record
MEDIA_TYPE: TMediaType;
StartCylinderNumber: DWORD;
EndCylinderNumber: DWORD;
StartHeadNumber: DWORD;
EndHeadNumber: DWORD;
FormatGapLength: WORD;
SectorsPerTrack: WORD;
SectorNumber: array[0..0] of WORD;
end;

var
H: THandle;
FPE: TFormatParametersEx;
BTN: array[0..82] of word; // BAD_TRACK_NUMBER array
BR: cardinal;

...

begin
// Открываем устройство для варианта NT
H:=CreateFile("\\.\A:",GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if H=INVALID_HANDLE_VALUE then Exit;

// Заполняем структуру для форматирования дискеты 1.74 Мб - 83 дорожки, 2 стороны, 21 сектор на дорожку
FPE.MEDIA_TYPE:=F3_1Pt44_512;
FPE.StartCylinderNumber:=0;
FPE.EndCylinderNumber:=82;
FPE.StartHeadNumber:=0;
FPE.EndHeadNumber:=1;
FPE.FormatGapLength:=0; // ??
FPE.SectorsPerTrack:=21;

// Далее нужно заполнить поле SectorNumber, но я не знаю чем. Пробовал:
// 1) SectorNumber: WORD и обнулял значение
// 2) SectorNumber: array[0..82] of WORD - по числу дорожек

DeviceIOControl(H,IOCTL_Disk_Format_Tracks_Ex,@FPE,sizeof(FPE),@BTN,sizeof(BTN),BR,nil);
BR:=GetLastError;
CloseHandle(H);
end;


GetLastError всегда возвращает ошибку 87 - Invalid Parameter. В чем замес? Что не нравится в параметрах - не пойму. Ткните носом в примеры или укажете где я неправ, плз...

PS: Выставление параметров на стандартный формат (80 дорожек, 2 стороны, 17 секторов) тоже возвращает код 87. А вызов IOCTL_Disk_Format_Tracks форматирует нормально весь диск.


 
Dimaxx ©   (2003-11-17 00:25) [1]

Удалено модератором
Примечание: Offtopic


 
DelphiN! ©   (2003-11-17 06:27) [2]

www.DelphiNsWorld.Narod.ru/Articles/Articles3/format_disk_in_win32.htm


 
Dimaxx ©   (2003-11-17 23:35) [3]

Это я и так знаю, а вот как замутить нестандартный формат?



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

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

Наверх




Память: 0.47 MB
Время: 0.017 c
4-72988
Shluz
2003-11-17 20:45
2004.01.23
ScreenShot отдельного региона экрана


8-72838
Tol-12
2003-09-12 23:26
2004.01.23
Gif


1-72765
MaXie
2004-01-13 09:39
2004.01.23
OnClick vs. SetChecked!


1-72834
den74
2004-01-08 15:01
2004.01.23
MessageDlg


6-72858
Novenkij
2003-11-19 20:20
2004.01.23
ServerSocket