Вот както раз понадобилось сделать ISO'шник одного диска, но под рукой никаких спец прог небыло. Зато был VS 6. Небольшими усилиями накатал прожку для создания ISO образов. Code: #include <stdio.h> #include <windows.h> #include <winioctl.h> int main(int argc, char* argv[]) { HANDLE cdrom; HANDLE iso; DISK_GEOMETRY diskgeo; ULONG retbyte; ULONG readsize; ULONG oldps; LARGE_INTEGER DiskSize; LARGE_INTEGER reads; char * bufer; // откроем первый привод cdrom=CreateFile("\\\\.\\Cdrom0", GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0); if (cdrom!=INVALID_HANDLE_VALUE) { // запросим инфу о диске if (DeviceIoControl(cdrom,IOCTL_DISK_GET_DRIVE_GEOMETRY,0,0,&diskgeo,sizeof(diskgeo),&retbyte,0)) { // создадим ISO файл iso=CreateFile("c:\\1.iso",GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0); if (iso!=INVALID_HANDLE_VALUE) { DiskSize.QuadPart=diskgeo.Cylinders.QuadPart*diskgeo.TracksPerCylinder*diskgeo.SectorsPerTrack*diskgeo.BytesPerSector; readsize=diskgeo.BytesPerSector<<2; // по 4 сектора будет читать bufer=(char*)malloc(readsize); // выделим место под буфер reads.QuadPart=0; printf("SIZE: %u\n",DiskSize.QuadPart); oldps=0; do { ReadFile(cdrom,bufer,readsize,&retbyte,0); if (!retbyte) // если несмогли прочесть сектора { FillMemory(bufer,readsize,0); // забьем буфер нулями retbyte=readsize; // типа всюже прочитали SetFilePointer(cdrom,retbyte,0,FILE_CURRENT);// передвиним указатель } reads.QuadPart+=retbyte; if (oldps+1<reads.QuadPart*100/DiskSize.QuadPart) { printf("READ: %u%%\r",reads.QuadPart*100/DiskSize.QuadPart); // покажем проценты oldps++; } WriteFile(iso,bufer,retbyte,&retbyte,0); // запишем в файл } while (reads.QuadPart<DiskSize.QuadPart);//читаем пока несчитали всё free(bufer); printf("\nCreate ISO OK!"); CloseHandle(iso); } else printf("ERROR: Create ISO File error"); } else printf("ERROR: Get Disk Info error"); CloseHandle(cdrom); } else printf("ERROR: Open CD-ROM error"); return 0; } Читает хорошо нормальные диски, на убитых дисках возможны глюки? но теоретически должен забить нулями поврежденные сектора.
неплоха. емм на написание программы понадобилось наверное около 30 минут? ))) хочу тебя огорчить, вбив в поисковик "создание образа iso" по первой же ссылке найдёшь)))) весёлый малый) не ищешь легких путей, прям как я 8)
в том то всё и дело что инета небыло под рукой. голая винда и флешка с компилятором и докой. + куча времяни)
А я щас пишу разбиралку MBR записи харда... SetFilePointer и LARGE_INTEGER - смерть >___< (а может я просто не в тыкаю в LBA/CHR адресацию)...