Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-72721
Barmaley2004
2004-01-11 23:51
2004.01.23
Как скопировать данные из ShellListView в ListView


1-72713
sbuffoon
2004-01-14 03:31
2004.01.23
Scrollbar


1-72756
alextov
2004-01-13 14:48
2004.01.23
В Win2000 при ошибке программа закрывается без сообщения о ошибке


1-72740
LastLamer
2004-01-09 19:35
2004.01.23
XMLDocument


14-72944
iMad02
2003-12-30 19:49
2004.01.23
Необходимо написать базу на MS Access за вознаграждение.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский