Я создаю динамический VHD для диска, имеющего несколько разделов.VHD не загружается в hyper V
Стадии является
Сначала я создать виртуальный жесткий диск путем создания верхних и нижних колонтитулов и вычисления летучей мыши (блок таблица размещения) размера.
Тогда я получить размер диска и раздела деталей с использованием Win32 API
я делать снимки томов
я прочитал МУРЗ родительского диска и перезапись смещения сектора, то я пишу MBR с несколькими разделами на VHD.
Теперь для каждой теневой копии я прочитал снимок и запись в файл VHD
Этот процесс завершается успешно, а затем я открыть VHD в diskmgmt.msc .Это показывает оба раздела и я могу видеть данные в тех перегородки.
Теперь я копирую этот VHD на машину гипер V, а затем создаю новый vm и добавлю это vhd на эту машину.
Когда он запускается, он дает мне сообщение об ошибке «Ошибка чтения диска», но когда я добавляю этот vhd в существующую ОС и добавляю загрузочную запись в загрузчик, он отлично загружается.
Я не знаю, что происходит Неправильно. Если кто-нибудь пришел, дайте мне несколько указателей.
Вот код, чтобы написать MBR
/* Stream out the first data block which contains only the MBR */
BYTE zerosector[512] = {0};
zerosector[0] = 0x80;
assert(0 != WriteFile(hFile, zerosector, 512, &nWritten, NULL)); /* here goes the first block's block bitmap */
zerosector[0] = 0x00;
unint16 mcount = 0;
unint64 indexOffset = 0;
memcpy(&mbr,mbrbuff,512);
for(vector<PartOffset*>::iterator pTemp = pPart.begin();pTemp!=pPart.end();pTemp++)
{
mbr.partition[mcount].type = 0x07;
mbr.partition[mcount].start_sector = 4096 + indexOffset ;
mbr.signature = 0xAA55;
mbr.partition[mcount].total_sectors = (((*pTemp)->total_sectors)) + 1 ;
indexOffset += ((((*pTemp)->total_sectors))) + 1;
//if(mcount==0)
// indexOffset += ((((*pTemp)->start_sector)/512));
mcount++;
}
Благодаря
Где ваш код? – Gabe
i ahove написал код для записи mbr – singh
Где вы пишете переменную 'mbr' на диск? – Gabe