Программа для .iso файлов с открытым исходным кодом для windows

Посоветуйте софт для работы с iso образами, которые имеют открытый исходный код

Дополнено (1). Программа нужна только для монтирования. Инструменты по работе с оптическими дисками не интересуют

Для работы? В смысле создания образов? Просто для их открытия вообще ничего не нужно. Сама винда уже официально поддерживает монтирование образов без сторонних программ.

Так все функции давно описаны и расписаны.
Например:

#include
#include
#include

const unsigned int SECTOR_SIZE = 2048; //размер сектора для CD

#ifdef _WIN32
#include

void GetDiskMetrics(const char* disk, unsigned int* pBlockSize, uint64_t* pTotalSize){

char path[MAX_PATH]="";
strcpy(path, disk);
strcat(path, ":\\");

unsigned long dwSectorsPerCluster, dwBytesPerSector, dwNumberOfFreeClusters, dwTotalNumberOfClusters;
unsigned int blocksize;
uint64_t totalsize;

//найдем размер сектора и объем данных на диске
int res = GetDiskFreeSpaceA(path, &dwSectorsPerCluster, &dwBytesPerSector,
&dwNumberOfFreeClusters, &dwTotalNumberOfClusters);

//вычислим размер блока, кратный размеру сектора, и общий объем данных в байтах
if (res){
blocksize = dwBytesPerSector * 20;
totalsize = dwSectorsPerCluster * dwBytesPerSector * (uint64_t)dwTotalNumberOfClusters;
}
else{
printf("GetDiskFreeSpace error %d", GetLastError());
blocksize = SECTOR_SIZE * 20;
totalsize = 4700307456; //DVD
}

*pBlockSize = blocksize;
*pTotalSize = totalsize;
}

bool OpenDevice(const char* disk, void** phFile){
char path[MAX_PATH]="";
sprintf(path, "\\\\.\\%s:", disk); //формат имени файла для открытия тома

//открываем том для прямого доступа на чтение
HANDLE handle = CreateFileA(path, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

if (handle == INVALID_HANDLE_VALUE) {
fprintf(stderr, "CreateFileA error %d", GetLastError());
return false;
}
else {
*phFile = handle;
return true;
}
}

bool ReadDevice(void* hFile, void* lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead){

BOOL res = ReadFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, NULL);

if (res == FALSE){
fprintf(stderr, "ReadFile error %d", GetLastError());
return false;
}
else return true;
}

void CloseDevice(void* hFile){
CloseHandle(hFile);
}
#endif

void CreateISO(const char* disk, const char* outfile){

char* buf;
unsigned long dwRead = 0;
uint64_t count = 0;
unsigned int blocksize;
uint64_t totalsize;

GetDiskMetrics(disk,&blocksize,&totalsize);
buf = (char*)malloc(blocksize);

//открываем том для прямого доступа на чтение
void* handle=NULL;
bool res = OpenDevice(disk,&handle);
if (res == false) goto End;

//открываем файл для записи
FILE* target = fopen(outfile, "wb");

while (true){
dwRead = 0;
memset(buf,0,blocksize);

//считаем блок данных
res = ReadDevice(handle, buf, blocksize, &dwRead);
if (res == false) goto End;

if (dwRead == 0) break; //конец считывания

count += dwRead;

printf(" Creating image: %5.1f%% [%10.2f KB / %10.2f KB]\r",
(count * 100.0f / totalsize),
(count / 1024.0f),
(totalsize / 1024.0f));

//запишем блок в файл
fwrite(buf, dwRead,1,target);
}

End: CloseDevice(handle);
fclose(target);
free(buf);
printf("\n");
}

int main(int argc, char **argv)
{

CreateISO("K", "c:\\distr\\image.iso");

getchar();
return 0;
}

Источник: https://ru.stackoverflow.com/questions/1054552/qt-c-Создание-iso-образа

На Windows 7 использую https://pcprogs.net/36-ultraiso.html

Добавить комментарий