Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791/* * PROJECT: ReactOS DiskPart * LICENSE: GPL - See COPYING in the top level directory * FILE: base/system/diskpart/diskpart.h * PURPOSE: Manages all the partitions of the OS in an interactive way. * PROGRAMMERS: Lee Schroeder */
#ifndef DISKPART_H#define DISKPART_H
/* INCLUDES ******************************************************************/
#include <stdio.h>#include <stdlib.h>
#define WIN32_NO_STATUS#include <windef.h>#include <winbase.h>#include <winnls.h>#include <winreg.h>#include <wincon.h>#include <winioctl.h>#include <winuser.h>#include <ntsecapi.h>
#include <errno.h>#include <strsafe.h>
#include <conutils.h>
/*#define NTOS_MODE_USER#include <ndk/exfuncs.h>#include <ndk/iofuncs.h>#include <ndk/obfuncs.h>#include <ndk/psfuncs.h>#include <ndk/rtlfuncs.h>#include <ndk/umfuncs.h>*/
#define NTOS_MODE_USER#include <ndk/cmfuncs.h>#include <ndk/exfuncs.h>#include <ndk/iofuncs.h>#include <ndk/kefuncs.h>#include <ndk/mmfuncs.h>#include <ndk/obfuncs.h>#include <ndk/psfuncs.h>#include <ndk/rtlfuncs.h>#include <ndk/setypes.h>#include <ndk/umfuncs.h>
#include <ntddscsi.h>#include <ntddstor.h>#include <mountmgr.h>
#include <fmifs/fmifs.h>#include <guiddef.h>#include <diskguid.h>
#include "resource.h"
//#define DUMP_PARTITION_TABLE//#define DUMP_PARTITION_LIST
/* DEFINES *******************************************************************/
/* NOERR codes for the program */#undef EXIT_SUCCESS#undef EXIT_FAILURE
typedef enum _EXIT_CODE{ EXIT_SUCCESS = 0, EXIT_FATAL, EXIT_CMD_ARG, EXIT_FILE, EXIT_SERVICE, EXIT_SYNTAX, EXIT_EXIT /* Only used by the exit command */} EXIT_CODE;
typedef struct _COMMAND{ PWSTR cmd1; PWSTR cmd2; PWSTR cmd3; EXIT_CODE (*func)(INT, PWSTR*); INT help; DWORD help_detail;} COMMAND, *PCOMMAND;
extern COMMAND cmds[];
#define MAX_STRING_SIZE 1024#define MAX_ARGS_COUNT 256
typedef enum _FORMATSTATE{ Unformatted, UnformattedOrDamaged, UnknownFormat, Preformatted, Formatted} FORMATSTATE, *PFORMATSTATE;
typedef enum _VOLUME_TYPE{ VOLUME_TYPE_CDROM, VOLUME_TYPE_PARTITION, VOLUME_TYPE_REMOVABLE, VOLUME_TYPE_UNKNOWN} VOLUME_TYPE, *PVOLUME_TYPE;
typedef struct _MBR_PARTITION_DATA{ BOOLEAN BootIndicator; UCHAR PartitionType;} MBR_PARTITION_DATA, *PMBR_PARTITION_DATA;
typedef struct _GPT_PARTITION_DATA{ GUID PartitionType; GUID PartitionId; DWORD64 Attributes;} GPT_PARTITION_DATA, *PGPT_PARTITION_DATA;
typedef struct _PARTENTRY{ LIST_ENTRY ListEntry;
struct _DISKENTRY *DiskEntry;
ULARGE_INTEGER StartSector; ULARGE_INTEGER SectorCount;
union { MBR_PARTITION_DATA Mbr; GPT_PARTITION_DATA Gpt; };
ULONG OnDiskPartitionNumber; ULONG PartitionNumber; ULONG PartitionIndex;
CHAR DriveLetter; CHAR VolumeLabel[17]; CHAR FileSystemName[9]; FORMATSTATE FormatState;
BOOLEAN LogicalPartition;
/* Partition is partitioned disk space */ BOOLEAN IsPartitioned;
/* Partition is new. Table does not exist on disk yet */ BOOLEAN New;
/* Partition was created automatically. */ BOOLEAN AutoCreate;
/* Partition must be checked */ BOOLEAN NeedsCheck;
struct _FILE_SYSTEM_ITEM *FileSystem;
BOOL IsSystem; BOOL IsBoot;
} PARTENTRY, *PPARTENTRY;
typedef struct _BIOSDISKENTRY{ LIST_ENTRY ListEntry; ULONG DiskNumber; ULONG Signature; ULONG Checksum; BOOLEAN Recognized; CM_DISK_GEOMETRY_DEVICE_DATA DiskGeometry; CM_INT13_DRIVE_PARAMETER Int13DiskData;} BIOSDISKENTRY, *PBIOSDISKENTRY;
typedef struct _DISKENTRY{ LIST_ENTRY ListEntry;
PWSTR Description; PWSTR Location; STORAGE_BUS_TYPE BusType;
ULONGLONG Cylinders; ULONG TracksPerCylinder; ULONG SectorsPerTrack; ULONG BytesPerSector;
ULARGE_INTEGER SectorCount; ULONG SectorAlignment; ULONG CylinderAlignment;
ULARGE_INTEGER StartSector; ULARGE_INTEGER EndSector;
BOOLEAN BiosFound; ULONG BiosDiskNumber;// ULONG Signature;// ULONG Checksum;
ULONG DiskNumber; USHORT Port; USHORT PathId; USHORT TargetId; USHORT Lun;
/* Has the partition list been modified? */ BOOLEAN Dirty;
BOOLEAN NewDisk; DWORD PartitionStyle;
UNICODE_STRING DriverName;
PDRIVE_LAYOUT_INFORMATION_EX LayoutBuffer;
PPARTENTRY ExtendedPartition;
LIST_ENTRY PrimaryPartListHead; LIST_ENTRY LogicalPartListHead;
BOOL IsBoot;
} DISKENTRY, *PDISKENTRY;
typedef struct _VOLENTRY{ LIST_ENTRY ListEntry;
ULONG VolumeNumber; WCHAR VolumeName[MAX_PATH]; WCHAR DeviceName[MAX_PATH]; DWORD SerialNumber;
WCHAR DriveLetter;
PWSTR pszLabel; PWSTR pszFilesystem; VOLUME_TYPE VolumeType; ULARGE_INTEGER Size;
ULARGE_INTEGER TotalAllocationUnits; ULARGE_INTEGER AvailableAllocationUnits; ULONG SectorsPerAllocationUnit; ULONG BytesPerSector;
BOOL IsSystem; BOOL IsBoot;
PVOLUME_DISK_EXTENTS pExtents;
} VOLENTRY, *PVOLENTRY;
#define SIZE_1KB (1024ULL)#define SIZE_10KB (10ULL * 1024ULL)#define SIZE_1MB (1024ULL * 1024ULL)#define SIZE_10MB (10ULL * 1024ULL * 1024ULL)#define SIZE_1GB (1024ULL * 1024ULL * 1024ULL)#define SIZE_10GB (10ULL * 1024ULL * 1024ULL * 1024ULL)#define SIZE_1TB (1024ULL * 1024ULL * 1024ULL * 1024ULL)#define SIZE_10TB (10ULL * 1024ULL * 1024ULL * 1024ULL * 1024ULL)
/* GLOBAL VARIABLES ***********************************************************/
extern LIST_ENTRY DiskListHead;extern LIST_ENTRY BiosDiskListHead;extern LIST_ENTRY VolumeListHead;
extern PDISKENTRY CurrentDisk;extern PPARTENTRY CurrentPartition;extern PVOLENTRY CurrentVolume;
/* PROTOTYPES *****************************************************************/
/* active.c */EXIT_CODEactive_main( _In_ INT argc, _In_ PWSTR *argv);
/* add.c */EXIT_CODEadd_main( _In_ INT argc, _In_ PWSTR *argv);
/* assign.c */EXIT_CODEassign_main( _In_ INT argc, _In_ PWSTR *argv);
/* attach.c */EXIT_CODEattach_main( _In_ INT argc, _In_ PWSTR *argv);
/* attributes.h */EXIT_CODEattributes_main( _In_ INT argc, _In_ PWSTR *argv);
/* automount.c */EXIT_CODEautomount_main( _In_ INT argc, _In_ PWSTR *argv);
/* break.c */EXIT_CODEbreak_main( _In_ INT argc, _In_ PWSTR *argv);
/* clean.c */EXIT_CODEclean_main( _In_ INT argc, _In_ PWSTR *argv);
/* compact.c */EXIT_CODEcompact_main( _In_ INT argc, _In_ PWSTR *argv);
/* convert.c */NTSTATUSCreateDisk( _In_ ULONG DiskNumber, _In_ PCREATE_DISK DiskInfo);
EXIT_CODEConvertGPT( _In_ INT argc, _In_ PWSTR *argv);
EXIT_CODEConvertMBR( _In_ INT argc, _In_ PWSTR *argv);
/* create.c */EXIT_CODECreateEfiPartition( _In_ INT argc, _In_ PWSTR *argv);
EXIT_CODECreateExtendedPartition( _In_ INT argc, _In_ PWSTR *argv);
EXIT_CODECreateLogicalPartition( _In_ INT argc, _In_ PWSTR *argv);
EXIT_CODECreateMsrPartition( _In_ INT argc, _In_ PWSTR *argv);
EXIT_CODECreatePrimaryPartition( _In_ INT argc, _In_ PWSTR *argv);
/* delete.c */EXIT_CODEDeleteDisk( _In_ INT argc, _In_ PWSTR *argv);
EXIT_CODEDeletePartition( _In_ INT argc, _In_ PWSTR *argv);
EXIT_CODEDeleteVolume( _In_ INT argc, _In_ PWSTR *argv);
/* detach.c */EXIT_CODEdetach_main( _In_ INT argc, _In_ PWSTR *argv);
/* detail.c */EXIT_CODEDetailDisk( INT argc, PWSTR *argv);
EXIT_CODEDetailPartition( INT argc, PWSTR *argv);
EXIT_CODEDetailVolume( INT argc, PWSTR *argv);
/* diskpart.c */
/* dump.c */EXIT_CODEDumpDisk( _In_ INT argc, _In_ LPWSTR *argv);
EXIT_CODEDumpPartition( _In_ INT argc, _In_ LPWSTR *argv);
/* expand.c */EXIT_CODEexpand_main( _In_ INT argc, _In_ PWSTR *argv);
/* extend.c */EXIT_CODEextend_main( _In_ INT argc, _In_ PWSTR *argv);
/* filesystem.c */EXIT_CODEfilesystems_main( _In_ INT argc, _In_ PWSTR *argv);
/* format.c */EXIT_CODEformat_main( _In_ INT argc, _In_ PWSTR *argv);
/* gpt.c */EXIT_CODEgpt_main( _In_ INT argc, _In_ PWSTR *argv);
/* help.c */EXIT_CODEhelp_main( _In_ INT argc, _In_ PWSTR *argv);
VOIDHelpCommandList(VOID);
EXIT_CODEHelpCommand( _In_ PCOMMAND pCommand);
/* import. c */EXIT_CODEimport_main( _In_ INT argc, _In_ PWSTR *argv);
/* inactive.c */EXIT_CODEinactive_main( _In_ INT argc, _In_ PWSTR *argv);
/* interpreter.c */EXIT_CODEInterpretScript( _In_ LPWSTR line);
EXIT_CODEInterpretCmd( _In_ INT argc, _In_ PWSTR *argv);
VOIDInterpretMain(VOID);
/* list.c */EXIT_CODEListDisk( INT argc, PWSTR *argv);
EXIT_CODEListPartition( INT argc, PWSTR *argv);
EXIT_CODEListVolume( INT argc, PWSTR *argv);
EXIT_CODEListVirtualDisk( INT argc, PWSTR *argv);
VOIDPrintDisk( _In_ PDISKENTRY DiskEntry);
VOIDPrintVolume( _In_ PVOLENTRY VolumeEntry);
/* merge.c */EXIT_CODEmerge_main( _In_ INT argc, _In_ PWSTR *argv);
/* misc.c */BOOLIsDecString( _In_ PWSTR pszDecString);
BOOLIsHexString( _In_ PWSTR pszHexString);
BOOLHasPrefix( _In_ PWSTR pszString, _In_ PWSTR pszPrefix, _Out_opt_ PWSTR *pszSuffix);
ULONGLONGRoundingDivide( _In_ ULONGLONG Dividend, _In_ ULONGLONG Divisor);
PWSTRDuplicateQuotedString( _In_ PWSTR pszInString);
PWSTRDuplicateString( _In_ PWSTR pszInString);
VOIDCreateGUID( _Out_ GUID *pGuid);
VOIDCreateSignature( _Out_ PDWORD pSignature);
VOIDPrintGUID( _Out_ PWSTR pszBuffer, _In_ GUID *pGuid);
BOOLStringToGUID( _Out_ GUID *pGuid, _In_ PWSTR pszString);
VOIDPrintBusType( _Out_ PWSTR pszBuffer, _In_ INT cchBufferMax, _In_ STORAGE_BUS_TYPE Bustype);
/* mountmgr.h */BOOLGetAutomountState( _Out_ PBOOL State);
BOOLSetAutomountState( _In_ BOOL bEnable);
BOOLScrubAutomount(VOID);
BOOLAssignDriveLetter( _In_ PWSTR DeviceName, _In_ WCHAR DriveLetter);
BOOLAssignNextDriveLetter( _In_ PWSTR DeviceName, _Out_ PWCHAR DriveLetter);
BOOLDeleteDriveLetter( _In_ WCHAR DriveLetter);
/* offline.c */EXIT_CODEoffline_main( _In_ INT argc, _In_ PWSTR *argv);
/* online.c */EXIT_CODEonline_main( _In_ INT argc, _In_ PWSTR *argv);
/* partlist.c */#ifdef DUMP_PARTITION_TABLEVOIDDumpPartitionTable( _In_ PDISKENTRY DiskEntry);#endif
#ifdef DUMP_PARTITION_LISTVOIDDumpPartitionList( _In_ PDISKENTRY DiskEntry);#endif
ULONGLONGAlignDown( _In_ ULONGLONG Value, _In_ ULONG Alignment);
NTSTATUSCreatePartitionList(VOID);
VOIDDestroyPartitionList(VOID);
NTSTATUSCreateVolumeList(VOID);
VOIDDestroyVolumeList(VOID);
VOIDScanForUnpartitionedMbrDiskSpace( PDISKENTRY DiskEntry);
VOIDScanForUnpartitionedGptDiskSpace( PDISKENTRY DiskEntry);
VOIDReadLayoutBuffer( _In_ HANDLE FileHandle, _In_ PDISKENTRY DiskEntry);
NTSTATUSWriteMbrPartitions( _In_ PDISKENTRY DiskEntry);
NTSTATUSWriteGptPartitions( _In_ PDISKENTRY DiskEntry);
VOIDUpdateMbrDiskLayout( _In_ PDISKENTRY DiskEntry);
VOIDUpdateGptDiskLayout( _In_ PDISKENTRY DiskEntry, _In_ BOOL DeleteEntry);
PPARTENTRYGetPrevUnpartitionedEntry( _In_ PPARTENTRY PartEntry);
PPARTENTRYGetNextUnpartitionedEntry( _In_ PPARTENTRY PartEntry);
ULONGGetPrimaryPartitionCount( _In_ PDISKENTRY DiskEntry);
NTSTATUSDismountVolume( _In_ PPARTENTRY PartEntry);
PVOLENTRYGetVolumeFromPartition( _In_ PPARTENTRY PartEntry);
VOIDRemoveVolume( _In_ PVOLENTRY VolumeEntry);
/* recover.c */EXIT_CODErecover_main( _In_ INT argc, _In_ PWSTR *argv);
/* remove.c */EXIT_CODEremove_main( _In_ INT argc, _In_ PWSTR *argv);
/* repair.c */EXIT_CODErepair_main( _In_ INT argc, _In_ PWSTR *argv);
/* rescan.c */EXIT_CODErescan_main( _In_ INT argc, _In_ PWSTR *argv);
/* retain.c */EXIT_CODEretain_main( _In_ INT argc, _In_ PWSTR *argv);
/* san.c */EXIT_CODEsan_main( _In_ INT argc, _In_ PWSTR *argv);
/* select.c */EXIT_CODESelectDisk( INT argc, PWSTR *argv);
EXIT_CODESelectPartition( INT argc, PWSTR *argv);
EXIT_CODESelectVolume( INT argc, PWSTR *argv);/*EXIT_CODESelectVirtualDisk( INT argc, PWSTR *argv);*//* setid.c */EXIT_CODEsetid_main( _In_ INT argc, _In_ PWSTR *argv);
/* shrink.c */EXIT_CODEshrink_main( _In_ INT argc, _In_ PWSTR *argv);
/* uniqueid.c */EXIT_CODEUniqueIdDisk( _In_ INT argc, _In_ PWSTR *argv);
#endif /* DISKPART_H */