CD/DVD shot 3.0 (32 bit + 64 bit)

CD/DVD shot

Утилита для снятия образа CD/DVD.

Устроена очень просто. Выбираете диск, нажимаете "Запись", выбирает файл образа, всё содержимое диска будет в него записано. Если диск нормальный (не исцарапан, нет защиты от копирования, или других факторов вызывающие ошибки чтения, то всё будет нормально. Копируется один в один, никакой отсебятины в образ не добавляется. Во время копирования проводится подсчет CRC32, MD5 и SHA-1. По окончании копирования они будут выведены в диалоговом окошке и записаны в "файл назначения.iso.log". Иногда почему то случается ошибка при чтении небольшого последнего кусочка информации с диска. В этом случае несчитанные данные замещаются нулями. И об этом событии сообщается (сколько реально считано байт). При этом образ получается вполне нормальным. Всякие там Nero и пр. любят в конец образа дописывать всякую туфту, может быть это происходит по этой причине. С истинной природой этого явления не разбирался.

CD/DVD shotДобавил дополнительную кнопку "Хэш". Она так же открывает диск, считывает данные, вычисляет хэши, но не записывает их. По окончании выводит окошко с результатами, и записывает их в cdshot.log в папке расположения утилиты. Таким образом можно проверять диски по контрольным суммам без создания файлов.

Дело в том, что перед тем как начать записывать, утилита сразу создает файл требуемого размера. Если попытка завершилась неудачей, например не хватает места на диске, то она прерывает операцию, и сообщает об ошибке. А в режиме только для чтения ей не требуется дополнительное место, и она может подсчитать контрольные суммы.

Лог с результатом:

Старт:	03.04.2009 18:49:27
Диск:	GRTMPFPP_RU (G:)
Размер:	621`850`624 байт
Файл:	E:\!For Test\cdshot\xp.iso
CRC32:	FFFFFFFF
MD5:	44143210B620491EB1D21EFC0B1A630A
SHA-1:	3686DA63D3D3E8402EB43FE4BF29A58486ECA6B3

Если кто интересуется, как это сделано на программном уровне (C++), то примерно так:

BOOL WINAPI MakeCDImage(TCHAR chDriveLetter, LPCTSTR lpIsoFile)
{
  TCHAR szDrive[8];
  wsprintf(szDrive, _T("\\\\.\\%c:"), chDriveLetter);

// Открытие диска как файла
  HANDLE hDrive = CreateFile(szDrive, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);

  if (hDrive != INVALID_HANDLE_VALUE)
  {
// Определение размера, ulTotal.QuadPart = размер ISO-образа
    wsprintf(szDrive, _T("%c:"), chDriveLetter);
    ULARGE_INTEGER ulFreeAvailable, ulTotal, ulTotalFree;
    BOOL bOK = GetDiskFreeSpaceEx(szDrive, &ulFreeAvailable, &ulTotal, &ulTotalFree);

// Здесь копирование содержимого hDrive в файл lpIsoFile, или только подсчет хэшей

    CloseHandle(hDrive);
    return TRUE;
  }
  return FALSE;
}

Загрузка
 
Файл cdshot.rar Желающие сделать добровольное пожертвование на дальнейшее развитие могут перечислить любую сумму на электронные кошельки справа.

Webmoney.ru Z363205522459
Версия 3.0.1.1 (32-bit и 64-bit) Webmoney.ru E102869475649
Собран 31 июля 2010 Webmoney.ru R402707906938
Размер 1.48 МБ Яндекс-деньги 4100178996949
MD5 54F1377C825809D260F2E51B3987BC58    

 
рублей Яндекс.Деньгами на счёт 4100178996949
 
Rambler's Top100