Утилита CD/DVD shot 3.5.0.1 (32 bit + 64 bit)

12.10.2010

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, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 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; }

9 октября 2010 исправлена ошибка открытия диска. Иногда диск не открывался из-за нехватки флагов при вызове функции.

Скачать утилиту можно здесь