Приветствую уважаемые форумчане.Интересует следующий вопрос: 1)можно ли с помощью подфункции 07h и прерывания BIOS провести форматирование из под венды.(если можно пример кода,потому что у меня не вышло)(з.ы для доса тоже пойдет) 2)Есть ли апишка актуальная для хр,висты,7?если можно тоже пример.Спасибо upd заюзать на худой конец shellexecute с параметрами не предлагать
то, что ты говоришь - это тока в DOS'е по этому пиши COM или EXE прогу под DOS. в Win32/Win64 запрещено вызывать BIOS прерывания, тем более почти все они недоступны из защищенного режима. Под винду, там не апишка, а IOCTL запросы к диску. Типа IOCTL_DISK_VERIFY - проверка сектора. IOCTL_DISK_FORMAT_TRACKS - форматирования дорожки. НО есть и более высокоуровневая апишка - ShFormatDrive
Просто я писал проги которые используют прерывания биоса для работы с графикой,и на хр их спокойно запускал(из командной строки естесно). Ок гляну. а без запуска стандартного окна?
мдауж. Ситуация прям тупиковая у тебя. ))))))))))) 1) к БИОС прерываниям ты имеешь доступа из Win32/Win64 приложений. А то что твоя прога работала - это потому что это DOS прога которая запусказаль в эмуляторе 16 битного режима, по этому и пахало всё. 2) + 3) А что религия не позволяет открыть исходники Win 2000 или гуглокод? и поглядеть реализацию этой функции и выдрать код который отвечает за форматирование?? К примеру win2k\private\shell\shell32\unicode\format.c находится исходник всех функций связанных с форматированием (включая окошко) На гуглокоде есть прям готовые реализации работы с IOCTL_DISK_FORMAT_TRACKS Советую поглядеть на запрос (в гуглокоде) IOCTL_DISK_FORMAT_TRACKS function:LowLevelFormat
не знал что сорцы w2k открыты. я в С не силен,походу эта функция?: Code: BOOL LowLevelFormat( HANDLE hDisk, PDISK_GEOMETRY lpGeometry ) { FORMAT_PARAMETERS FormatParameters; PBAD_TRACK_NUMBER lpBadTrack; UINT i; BOOL b; DWORD ReturnedByteCount; FormatParameters.MediaType = lpGeometry->MediaType; FormatParameters.StartHeadNumber = 0; FormatParameters.EndHeadNumber = lpGeometry->TracksPerCylinder - 1; lpBadTrack = (PBAD_TRACK_NUMBER) LocalAlloc(LMEM_ZEROINIT,lpGeometry->TracksPerCylinder*sizeof(*lpBadTrack)); for (i = 0; i < lpGeometry->Cylinders.LowPart; i++) { FormatParameters.StartCylinderNumber = i; FormatParameters.EndCylinderNumber = i; b = DeviceIoControl( hDisk, IOCTL_DISK_FORMAT_TRACKS, &FormatParameters, sizeof(FormatParameters), lpBadTrack, lpGeometry->TracksPerCylinder*sizeof(*lpBadTrack), &ReturnedByteCount, NULL ); if (!b ) { LocalFree(lpBadTrack); return b; } } LocalFree(lpBadTrack); return TRUE; }