ReactOS 0.4.16-dev-1972-gf20c09f
convert.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS DiskPart
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: base/system/diskpart/convert.c
5 * PURPOSE: Manages all the partitions of the OS in an interactive way.
6 * PROGRAMMERS: Lee Schroeder
7 */
8
9#include "diskpart.h"
10
11#define NDEBUG
12#include <debug.h>
13
16 _In_ ULONG DiskNumber,
17 _In_ PCREATE_DISK DiskInfo)
18{
25
26 DPRINT1("CreateDisk(%lu %p)\n", DiskNumber, DiskInfo);
27
29 L"\\Device\\Harddisk%lu\\Partition0",
32
34 &Name,
36 NULL,
37 NULL);
38
42 &Iosb,
43 0,
45 if (!NT_SUCCESS(Status))
46 {
47 DPRINT1("NtOpenFile() failed (Status %lx)\n", Status);
48 goto done;
49 }
50
52 NULL,
53 NULL,
54 NULL,
55 &Iosb,
57 DiskInfo,
58 sizeof(*DiskInfo),
59 NULL,
60 0);
61 if (!NT_SUCCESS(Status))
62 {
63 DPRINT1("NtDeviceIoControlFile() failed (Status %lx)\n", Status);
64 goto done;
65 }
66
67 CurrentDisk->PartitionStyle = DiskInfo->PartitionStyle;
68
69 /* Free the layout buffer */
71 {
72 RtlFreeHeap(RtlGetProcessHeap(), 0, CurrentDisk->LayoutBuffer);
75 }
76
78
79 DPRINT1("PartitionCount: %lu\n", CurrentDisk->LayoutBuffer->PartitionCount);
80
81#ifdef DUMP_PARTITION_TABLE
82 DumpPartitionTable(CurrentDisk);
83#endif
84
85done:
86 if (FileHandle)
88
89 return Status;
90}
91
92
93BOOL
97{
98 CREATE_DISK DiskInfo;
100
101 DPRINT("ConvertGPT()\n");
102
103 if (CurrentDisk == NULL)
104 {
106 return TRUE;
107 }
108
110 {
112 return TRUE;
113 }
114
116 {
118 return TRUE;
119 }
120
121#if 0
122 /* Fail if disk size is less than 128MB */
123 if (CurrentDisk->SectorCount.QuadPart * CurrentDisk->BytesPerSector < 128ULL * 1024ULL * 1024ULL)
124 {
125 ConResPuts(StdOut, IDS_CONVERT_GPT_TOO_SMALL);
126 return TRUE;
127 }
128#endif
129
130 DiskInfo.PartitionStyle = PARTITION_STYLE_GPT;
131 CreateGUID(&DiskInfo.Gpt.DiskId);
132 DiskInfo.Gpt.MaxPartitionCount = 128;
133
135 if (!NT_SUCCESS(Status))
136 {
137
138 }
139 else
140 {
142 }
143
144 return TRUE;
145}
146
147
148BOOL
150 _In_ INT argc,
151 _In_ PWSTR *argv)
152{
153 CREATE_DISK DiskInfo;
155
156 DPRINT("ConvertMBR()\n");
157
158 if (CurrentDisk == NULL)
159 {
161 return TRUE;
162 }
163
165 (CurrentDisk->PartitionStyle == PARTITION_STYLE_RAW))
166 {
168 return TRUE;
169 }
170
172 {
174 return TRUE;
175 }
176
177 DiskInfo.PartitionStyle = PARTITION_STYLE_MBR;
178 CreateSignature(&DiskInfo.Mbr.Signature);
179
181 if (!NT_SUCCESS(Status))
182 {
183
184 }
185 else
186 {
188 }
189
190 return TRUE;
191}
static int argc
Definition: ServiceArgs.c:12
#define StdOut
Definition: fc.c:14
void ConResPuts(FILE *fp, UINT nID)
Definition: fc.c:27
LONG NTSTATUS
Definition: precomp.h:26
#define DPRINT1
Definition: precomp.h:8
#define IDS_CONVERT_GPT_NOT_EMPTY
Definition: resource.h:31
#define IDS_CONVERT_GPT_SUCCESS
Definition: resource.h:32
#define IDS_CONVERT_MBR_ALREADY
Definition: resource.h:33
#define IDS_CONVERT_MBR_NOT_EMPTY
Definition: resource.h:34
#define IDS_SELECT_NO_DISK
Definition: resource.h:94
#define IDS_CONVERT_GPT_ALREADY
Definition: resource.h:30
#define IDS_CONVERT_MBR_SUCCESS
Definition: resource.h:35
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
Definition: heap.c:634
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:36
LPWSTR Name
Definition: desk.c:124
VOID CreateGUID(_Out_ GUID *pGuid)
Definition: misc.c:152
PDISKENTRY CurrentDisk
Definition: partlist.c:76
VOID ReadLayoutBuffer(_In_ HANDLE FileHandle, _In_ PDISKENTRY DiskEntry)
Definition: partlist.c:816
VOID CreateSignature(_Out_ PDWORD pSignature)
Definition: misc.c:168
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
#define GENERIC_READ
Definition: compat.h:135
#define MAX_PATH
Definition: compat.h:34
#define L(x)
Definition: resources.c:13
return Iosb
Definition: create.c:4403
unsigned int BOOL
Definition: ntddk_ex.h:94
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE FileHandle
Definition: fltkernel.h:1231
#define FILE_SYNCHRONOUS_IO_NONALERT
Definition: from_kernel.h:31
Status
Definition: gdiplustypes.h:25
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
@ PARTITION_STYLE_GPT
Definition: imports.h:202
@ PARTITION_STYLE_MBR
Definition: imports.h:201
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
#define argv
Definition: mplay32.c:18
#define _In_
Definition: no_sal2.h:158
NTSYSAPI NTSTATUS NTAPI NtOpenFile(OUT PHANDLE phFile, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG ShareMode, IN ULONG OpenMode)
Definition: file.c:3953
#define SYNCHRONIZE
Definition: nt_native.h:61
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSYSAPI NTSTATUS NTAPI NtDeviceIoControlFile(IN HANDLE hFile, IN HANDLE hEvent OPTIONAL, IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL, IN PVOID IoApcContext OPTIONAL, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG DeviceIoControlCode, IN PVOID InBuffer OPTIONAL, IN ULONG InBufferLength, OUT PVOID OutBuffer OPTIONAL, IN ULONG OutBufferLength)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3402
#define GENERIC_WRITE
Definition: nt_native.h:90
#define IOCTL_DISK_CREATE_DISK
Definition: ntdddisk.h:55
IN HANDLE DstPath
Definition: fsutil.h:81
#define DPRINT
Definition: sndvol32.h:73
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
ULARGE_INTEGER SectorCount
Definition: partlist.h:115
PPARTENTRY ExtendedPartition
Definition: partlist.h:153
ULONG DiskNumber
Definition: partlist.h:129
ULONG BytesPerSector
Definition: partlist.h:113
DWORD PartitionStyle
Definition: diskpart.h:179
PDRIVE_LAYOUT_INFORMATION LayoutBuffer
Definition: partlist.h:143
ULONGLONG QuadPart
Definition: ms-dtyp.idl:185
BOOL ConvertGPT(_In_ INT argc, _In_ PWSTR *argv)
Definition: convert.c:94
BOOL ConvertMBR(_In_ INT argc, _In_ PWSTR *argv)
Definition: convert.c:149
NTSTATUS CreateDisk(_In_ ULONG DiskNumber, _In_ PCREATE_DISK DiskInfo)
Definition: convert.c:15
uint16_t * PWSTR
Definition: typedefs.h:56
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG
Definition: typedefs.h:59
__wchar_t WCHAR
Definition: xmlstorage.h:180