ReactOS 0.4.16-dev-1990-gfa5cf28
convert.c File Reference
#include "diskpart.h"
#include <debug.h>
Include dependency graph for convert.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

NTSTATUS CreateDisk (_In_ ULONG DiskNumber, _In_ PCREATE_DISK DiskInfo)
 
BOOL ConvertGPT (_In_ INT argc, _In_ PWSTR *argv)
 
BOOL ConvertMBR (_In_ INT argc, _In_ PWSTR *argv)
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 11 of file convert.c.

Function Documentation

◆ ConvertGPT()

BOOL ConvertGPT ( _In_ INT  argc,
_In_ PWSTR argv 
)

Definition at line 88 of file convert.c.

91{
92 CREATE_DISK DiskInfo;
94
95 DPRINT("ConvertGPT()\n");
96
97 if (CurrentDisk == NULL)
98 {
100 return TRUE;
101 }
102
104 {
106 return TRUE;
107 }
108
110 {
112 return TRUE;
113 }
114
115#if 0
116 /* Fail if disk size is less than 128MB */
117 if (CurrentDisk->SectorCount.QuadPart * CurrentDisk->BytesPerSector < 128ULL * 1024ULL * 1024ULL)
118 {
119 ConResPuts(StdOut, IDS_CONVERT_GPT_TOO_SMALL);
120 return TRUE;
121 }
122#endif
123
124 DiskInfo.PartitionStyle = PARTITION_STYLE_GPT;
125 CreateGUID(&DiskInfo.Gpt.DiskId);
126 DiskInfo.Gpt.MaxPartitionCount = 128;
127
129 if (!NT_SUCCESS(Status))
130 {
131 DPRINT1("CreateDisk() failed!\n");
132 return TRUE;
133 }
134
139
142
143 return TRUE;
144}
#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_SELECT_NO_DISK
Definition: resource.h:95
#define IDS_CONVERT_GPT_ALREADY
Definition: resource.h:30
VOID CreateGUID(_Out_ GUID *pGuid)
Definition: misc.c:152
PDISKENTRY CurrentDisk
Definition: partlist.c:77
VOID ScanForUnpartitionedGptDiskSpace(PDISKENTRY DiskEntry)
Definition: partlist.c:923
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
Status
Definition: gdiplustypes.h:25
@ PARTITION_STYLE_GPT
Definition: imports.h:202
ULONGLONG AlignDown(IN ULONGLONG Value, IN ULONG Alignment)
Definition: partlist.c:67
#define GetPrimaryPartitionCount(DiskEntry)
Definition: partlist.c:2527
#define DPRINT
Definition: sndvol32.h:73
ULARGE_INTEGER EndSector
Definition: diskpart.h:185
ULONG SectorAlignment
Definition: partlist.h:116
ULARGE_INTEGER SectorCount
Definition: partlist.h:115
ULONG DiskNumber
Definition: partlist.h:129
ULONG BytesPerSector
Definition: partlist.h:113
ULARGE_INTEGER StartSector
Definition: diskpart.h:184
DWORD PartitionStyle
Definition: diskpart.h:202
PDRIVE_LAYOUT_INFORMATION LayoutBuffer
Definition: partlist.h:143
ULONGLONG QuadPart
Definition: ms-dtyp.idl:185
NTSTATUS CreateDisk(_In_ ULONG DiskNumber, _In_ PCREATE_DISK DiskInfo)
Definition: convert.c:15
uint64_t ULONGLONG
Definition: typedefs.h:67

◆ ConvertMBR()

BOOL ConvertMBR ( _In_ INT  argc,
_In_ PWSTR argv 
)

Definition at line 148 of file convert.c.

151{
152 CREATE_DISK DiskInfo;
154
155 DPRINT("ConvertMBR()\n");
156
157 if (CurrentDisk == NULL)
158 {
160 return TRUE;
161 }
162
164 (CurrentDisk->PartitionStyle == PARTITION_STYLE_RAW))
165 {
167 return TRUE;
168 }
169
171 {
173 return TRUE;
174 }
175
176 DiskInfo.PartitionStyle = PARTITION_STYLE_MBR;
177 CreateSignature(&DiskInfo.Mbr.Signature);
178
180 if (!NT_SUCCESS(Status))
181 {
182 DPRINT1("CreateDisk() failed!\n");
183 return TRUE;
184 }
185
188
191
192 return TRUE;
193}
#define IDS_CONVERT_MBR_ALREADY
Definition: resource.h:33
#define IDS_CONVERT_MBR_NOT_EMPTY
Definition: resource.h:34
#define IDS_CONVERT_MBR_SUCCESS
Definition: resource.h:35
VOID ScanForUnpartitionedMbrDiskSpace(PDISKENTRY DiskEntry)
Definition: partlist.c:662
VOID CreateSignature(_Out_ PDWORD pSignature)
Definition: misc.c:168
@ PARTITION_STYLE_MBR
Definition: imports.h:201
#define min(a, b)
Definition: monoChain.cc:55

◆ CreateDisk()

NTSTATUS CreateDisk ( _In_ ULONG  DiskNumber,
_In_ PCREATE_DISK  DiskInfo 
)

Definition at line 15 of file convert.c.

18{
25
26 DPRINT("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 /* Free the layout buffer */
69 RtlFreeHeap(RtlGetProcessHeap(), 0, CurrentDisk->LayoutBuffer);
70
75 CurrentDisk->PartitionStyle = DiskInfo->PartitionStyle;
76
78
79done:
80 if (FileHandle)
82
83 return Status;
84}
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 ReadLayoutBuffer(_In_ HANDLE FileHandle, _In_ PDISKENTRY DiskEntry)
Definition: partlist.c:1067
#define FALSE
Definition: types.h:117
#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
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE FileHandle
Definition: fltkernel.h:1231
#define FILE_SYNCHRONOUS_IO_NONALERT
Definition: from_kernel.h:31
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
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
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
PPARTENTRY ExtendedPartition
Definition: partlist.h:153
BOOLEAN NewDisk
Definition: partlist.h:138
BOOLEAN Dirty
Definition: partlist.h:136
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by ConvertGPT(), ConvertMBR(), CreateExtendedPartition(), and CreatePrimaryPartition().