ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

CD 2 ISO
  #1  
Старый 25.05.2009, 00:47
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию CD 2 ISO

Вот както раз понадобилось сделать ISO'шник одного диска, но под рукой никаких спец прог небыло. Зато был VS 6. Небольшими усилиями накатал прожку для создания ISO образов.
Код:
#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;
}
Читает хорошо нормальные диски, на убитых дисках возможны глюки? но теоретически должен забить нулями поврежденные сектора.
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прожиг ISO на флэшку nonamez Soft - Windows 2 13.02.2009 20:18
freebsd: монтирование образа iso fucker"ok *nix 7 27.11.2008 11:13
Великие битвы: Курская дуга (2007) Iso ~!DoK_tOR!~ Болталка 0 12.02.2007 17:59
Microsoft Windows XP Professional Corporate SP2 Integrated January 2007 (ISO) ~!DoK_tOR!~ Soft - Windows 0 04.02.2007 13:25
5 cd iso tclover Болталка 1 19.02.2006 16:46



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ