Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz

25.05.2009, 00:47
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
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;
}
Читает хорошо нормальные диски, на убитых дисках возможны глюки? но теоретически должен забить нулями поврежденные сектора.
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|