Форум: "WinAPI";
Текущий архив: 2004.01.23;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.01.23;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c