Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 17
1

Запись mbr

13.02.2013, 00:44. Показов 2711. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно разделить диск на 2 раздела
Вот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// part.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include<iostream>
#include<Windows.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hDrive;
DISK_GEOMETRY diskGeometry;
 
DWORD szReturned;
unsigned int SectorSize=512;
PARTITION_INFORMATION_EX partitionInfo;
BOOL Result; 
 
 
DWORD szNewLayout=sizeof(DRIVE_LAYOUT_INFORMATION_EX)+4*sizeof(PARTITION_INFORMATION_EX);
DRIVE_LAYOUT_INFORMATION_EX *dl=(DRIVE_LAYOUT_INFORMATION_EX*) new BYTE[szNewLayout];
hDrive=CreateFile(L"\\\\.\\PhysicalDrive1",GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
if(hDrive==NULL)
{std::cout<<"CreateFile errors"<<std::endl;}
CREATE_DISK disk;
ZeroMemory(&disk,sizeof(CREATE_DISK));
disk.PartitionStyle=PARTITION_STYLE_MBR;
disk.Mbr.Signature=0xA4B57300;
Result=DeviceIoControl(hDrive,IOCTL_DISK_CREATE_DISK,&disk,sizeof(CREATE_DISK),NULL,0,&szReturned,NULL);
if(!Result)
{
    std::cout<<"IOCTL_DISK_CREATE_DISK errors"<<std::endl;
}
 
DeviceIoControl(hDrive,IOCTL_DISK_UPDATE_PROPERTIES,NULL,0,NULL,0,&szReturned,NULL);
 
DeviceIoControl(hDrive,IOCTL_DISK_GET_PARTITION_INFO,NULL,0,&partitionInfo,sizeof (PARTITION_INFORMATION),&szReturned,(LPOVERLAPPED)NULL);
DeviceIoControl(hDrive,IOCTL_DISK_GET_DRIVE_GEOMETRY,NULL,0,&diskGeometry,sizeof (DISK_GEOMETRY),&szReturned,(LPOVERLAPPED)NULL);
cout << "Num of cylinders:     " << diskGeometry.Cylinders.QuadPart << endl;
cout << "Tracks per cylinder:  " << diskGeometry.TracksPerCylinder << endl;
cout << "Sectors per track:    " << diskGeometry.SectorsPerTrack << endl;
cout << "Bytes per sector:     " << diskGeometry.BytesPerSector << endl;
int col=diskGeometry.Cylinders.QuadPart*diskGeometry.TracksPerCylinder*diskGeometry.SectorsPerTrack;
cout<<"Col sector              "<<col<<endl;
cout<<"Size in byte            "<<col*diskGeometry.BytesPerSector<<endl;
LARGE_INTEGER DiskSize,Part_1_size,Part_2_size;
 
 DiskSize.QuadPart = col*diskGeometry.BytesPerSector;
 Part_1_size.QuadPart =col*diskGeometry.BytesPerSector/2;
 Part_2_size.QuadPart= col*diskGeometry.BytesPerSector/2; 
 ZeroMemory(dl,szNewLayout);
dl->PartitionEntry[0].PartitionStyle = PARTITION_STYLE_MBR;
 dl->PartitionEntry[0].StartingOffset.QuadPart = 32256;
 dl->PartitionEntry[0].PartitionLength = Part_1_size;
 dl->PartitionEntry[0].PartitionNumber = 1;
 dl->PartitionEntry[0].RewritePartition = TRUE;
 dl->PartitionEntry[0].Mbr.PartitionType = PARTITION_FAT32;
 dl->PartitionEntry[0].Mbr.BootIndicator = TRUE;
 dl->PartitionEntry[0].Mbr.RecognizedPartition = 1;
 dl->PartitionEntry[0].Mbr.HiddenSectors=32256/SectorSize;
 
 dl->PartitionEntry[1].PartitionStyle=PARTITION_STYLE_MBR;
 dl->PartitionEntry[1].StartingOffset.QuadPart= Part_1_size.QuadPart + 32256;
 dl->PartitionEntry[1].PartitionLength = Part_2_size;
 dl->PartitionEntry[1].PartitionNumber=0;
 dl->PartitionEntry[1].RewritePartition = TRUE;
 dl->PartitionEntry[1].Mbr.PartitionType = PARTITION_EXTENDED;
 dl->PartitionEntry[1].Mbr.RecognizedPartition = 1;
 dl->PartitionEntry [1]. Mbr.BootIndicator = FALSE;
 dl->PartitionEntry[1].Mbr.HiddenSectors = (32256+Part_1_size.QuadPart)/SectorSize;
 for (int item=0;item<4;item++)
     {
         dl->PartitionEntry[item].RewritePartition = 1;
         dl->PartitionEntry [item]. PartitionNumber = 0;
    }
 
 dl->PartitionStyle = PARTITION_STYLE_MBR;
 dl->PartitionCount = 4;
 dl->Mbr.Signature = 0xA4B57300;
 
if(!DeviceIoControl(hDrive,IOCTL_DISK_SET_DRIVE_LAYOUT_EX, &dl,szNewLayout,NULL,0,&szReturned,NULL))
{std::cout<<"errors"<<std::endl;}//возращает false
 
 DeviceIoControl(hDrive,IOCTL_DISK_UPDATE_PROPERTIES,NULL,0,NULL,0,&szReturned,NULL);
 
CloseHandle(hDrive);
delete dl;
 
 
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.02.2013, 00:44
Ответы с готовыми решениями:

Обращение к mbr
Как записать в mbr собственный файл? По данным интернета, так #include &lt;windows.h&gt; int main()...

Чтение mbr и gpt
Есть программа (не моя) которая вроде-как читает и то и то у какого-то файла. Я хочу читать mbr и...

Считать MBR (kernel32.dll)
В курсовой работе нужно считать MBR. Делаю через C#, говорят, что через kernel32.dll можно это...

Victoria 5. отключил MBR OFF, после повторного включения MBR ON и перегрузки остается MBR OFF. В системе - unlocated
Приветствую Вас :) Такая беда: - работаю с идешкой PHPStorm. После одной запары стала...

0
13.02.2013, 00:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2013, 00:44
Помогаю со студенческими работами здесь

flash, CD , MBR
Недавно столкнулся с такой ситуацией: образы некоторых лайф сиди после записи на флешку...

Переписать mbr
Но Windows же не даст так просто вырвать из под себя mbr, но это каким-то образом делают после...

Полетела MBR?
Мать ASUS P5LD2 (AMI BIOS) Хард HITACHI HDT 721025 SLA 380 250гб На харде стоит Windows XP SP3 VL...

восстановление MBR
cлетел MBR после переразбивки. при загрузке пишет missing operating system и черный экран....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru