mirror of
https://github.com/reactos/reactos.git
synced 2024-12-30 19:14:31 +00:00
516 lines
8.8 KiB
C
516 lines
8.8 KiB
C
/*
|
|
* 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 <winreg.h>
|
|
#include <wincon.h>
|
|
#include <winioctl.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 <fmifs/fmifs.h>
|
|
|
|
#include "resource.h"
|
|
|
|
/* DEFINES *******************************************************************/
|
|
|
|
typedef struct _COMMAND
|
|
{
|
|
PWSTR cmd1;
|
|
PWSTR cmd2;
|
|
PWSTR cmd3;
|
|
BOOL (*func)(INT, WCHAR**);
|
|
INT help;
|
|
DWORD help_detail;
|
|
} COMMAND, *PCOMMAND;
|
|
|
|
extern COMMAND cmds[];
|
|
|
|
/* NOERR codes for the program */
|
|
//#define ERROR_NONE 0
|
|
//#define ERROR_FATAL 1
|
|
//#define ERROR_CMD_ARG 2
|
|
//#define ERROR_FILE 3
|
|
//#define ERROR_SERVICE 4
|
|
//#define ERROR_SYNTAX 5
|
|
|
|
#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 _PARTENTRY
|
|
{
|
|
LIST_ENTRY ListEntry;
|
|
|
|
struct _DISKENTRY *DiskEntry;
|
|
|
|
ULARGE_INTEGER StartSector;
|
|
ULARGE_INTEGER SectorCount;
|
|
|
|
BOOLEAN BootIndicator;
|
|
UCHAR PartitionType;
|
|
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;
|
|
} 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;
|
|
|
|
ULONGLONG Cylinders;
|
|
ULONG TracksPerCylinder;
|
|
ULONG SectorsPerTrack;
|
|
ULONG BytesPerSector;
|
|
|
|
ULARGE_INTEGER SectorCount;
|
|
ULONG SectorAlignment;
|
|
ULONG CylinderAlignment;
|
|
|
|
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;
|
|
BOOLEAN NoMbr; /* MBR is absent */
|
|
|
|
UNICODE_STRING DriverName;
|
|
|
|
PDRIVE_LAYOUT_INFORMATION LayoutBuffer;
|
|
|
|
PPARTENTRY ExtendedPartition;
|
|
|
|
LIST_ENTRY PrimaryPartListHead;
|
|
LIST_ENTRY LogicalPartListHead;
|
|
|
|
} DISKENTRY, *PDISKENTRY;
|
|
|
|
typedef struct _VOLENTRY
|
|
{
|
|
LIST_ENTRY ListEntry;
|
|
|
|
ULONG VolumeNumber;
|
|
WCHAR VolumeName[MAX_PATH];
|
|
WCHAR DeviceName[MAX_PATH];
|
|
|
|
WCHAR DriveLetter;
|
|
|
|
PWSTR pszLabel;
|
|
PWSTR pszFilesystem;
|
|
VOLUME_TYPE VolumeType;
|
|
ULARGE_INTEGER Size;
|
|
|
|
PVOLUME_DISK_EXTENTS pExtents;
|
|
|
|
} VOLENTRY, *PVOLENTRY;
|
|
|
|
|
|
/* 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 */
|
|
BOOL active_main(INT argc, LPWSTR *argv);
|
|
|
|
/* add.c */
|
|
BOOL add_main(INT argc, LPWSTR *argv);
|
|
|
|
/* assign.c */
|
|
BOOL assign_main(INT argc, LPWSTR *argv);
|
|
|
|
/* attach.c */
|
|
BOOL attach_main(INT argc, LPWSTR *argv);
|
|
|
|
/* attributes.h */
|
|
BOOL attributes_main(INT argc, LPWSTR *argv);
|
|
|
|
/* automount.c */
|
|
BOOL automount_main(INT argc, LPWSTR *argv);
|
|
|
|
/* break.c */
|
|
BOOL break_main(INT argc, LPWSTR *argv);
|
|
|
|
/* clean.c */
|
|
BOOL clean_main(INT argc, LPWSTR *argv);
|
|
|
|
/* compact.c */
|
|
BOOL compact_main(INT argc, LPWSTR *argv);
|
|
|
|
/* convert.c */
|
|
BOOL convert_main(INT argc, LPWSTR *argv);
|
|
|
|
/* create.c */
|
|
BOOL
|
|
CreateExtendedPartition(
|
|
_In_ INT argc,
|
|
_In_ PWSTR *argv);
|
|
|
|
BOOL
|
|
CreateLogicalPartition(
|
|
_In_ INT argc,
|
|
_In_ PWSTR *argv);
|
|
|
|
BOOL
|
|
CreatePrimaryPartition(
|
|
_In_ INT argc,
|
|
_In_ PWSTR *argv);
|
|
|
|
/* delete.c */
|
|
BOOL
|
|
DeleteDisk(
|
|
_In_ INT argc,
|
|
_In_ PWSTR *argv);
|
|
|
|
BOOL
|
|
DeletePartition(
|
|
_In_ INT argc,
|
|
_In_ PWSTR *argv);
|
|
|
|
BOOL
|
|
DeleteVolume(
|
|
_In_ INT argc,
|
|
_In_ PWSTR *argv);
|
|
|
|
|
|
/* detach.c */
|
|
BOOL detach_main(INT argc, LPWSTR *argv);
|
|
|
|
/* detail.c */
|
|
BOOL
|
|
DetailDisk(
|
|
INT argc,
|
|
PWSTR *argv);
|
|
|
|
BOOL
|
|
DetailPartition(
|
|
INT argc,
|
|
PWSTR *argv);
|
|
|
|
BOOL
|
|
DetailVolume(
|
|
INT argc,
|
|
PWSTR *argv);
|
|
|
|
/* diskpart.c */
|
|
|
|
/* dump.c */
|
|
BOOL
|
|
DumpDisk(
|
|
_In_ INT argc,
|
|
_In_ LPWSTR *argv);
|
|
|
|
BOOL
|
|
DumpPartition(
|
|
_In_ INT argc,
|
|
_In_ LPWSTR *argv);
|
|
|
|
|
|
/* expand.c */
|
|
BOOL expand_main(INT argc, LPWSTR *argv);
|
|
|
|
/* extend.c */
|
|
BOOL extend_main(INT argc, LPWSTR *argv);
|
|
|
|
/* filesystem.c */
|
|
BOOL filesystems_main(INT argc, LPWSTR *argv);
|
|
|
|
/* format.c */
|
|
BOOL format_main(INT argc, LPWSTR *argv);
|
|
|
|
/* gpt.c */
|
|
BOOL gpt_main(INT argc, LPWSTR *argv);
|
|
|
|
/* help.c */
|
|
BOOL help_main(INT argc, LPWSTR *argv);
|
|
VOID HelpCommandList(VOID);
|
|
BOOL HelpCommand(PCOMMAND pCommand);
|
|
|
|
/* import. c */
|
|
BOOL import_main(INT argc, LPWSTR *argv);
|
|
|
|
/* inactive.c */
|
|
BOOL inactive_main(INT argc, LPWSTR *argv);
|
|
|
|
/* interpreter.c */
|
|
BOOL InterpretScript(LPWSTR line);
|
|
BOOL InterpretCmd(INT argc, LPWSTR *argv);
|
|
VOID InterpretMain(VOID);
|
|
|
|
/* list.c */
|
|
BOOL
|
|
ListDisk(
|
|
INT argc,
|
|
PWSTR *argv);
|
|
|
|
BOOL
|
|
ListPartition(
|
|
INT argc,
|
|
PWSTR *argv);
|
|
|
|
BOOL
|
|
ListVolume(
|
|
INT argc,
|
|
PWSTR *argv);
|
|
|
|
BOOL
|
|
ListVirtualDisk(
|
|
INT argc,
|
|
PWSTR *argv);
|
|
|
|
VOID
|
|
PrintDisk(
|
|
_In_ PDISKENTRY DiskEntry);
|
|
|
|
VOID
|
|
PrintVolume(
|
|
_In_ PVOLENTRY VolumeEntry);
|
|
|
|
/* merge.c */
|
|
BOOL merge_main(INT argc, LPWSTR *argv);
|
|
|
|
/* misc.c */
|
|
BOOL
|
|
IsDecString(
|
|
_In_ PWSTR pszDecString);
|
|
|
|
BOOL
|
|
IsHexString(
|
|
_In_ PWSTR pszHexString);
|
|
|
|
BOOL
|
|
HasPrefix(
|
|
_In_ PWSTR pszString,
|
|
_In_ PWSTR pszPrefix,
|
|
_Out_opt_ PWSTR *pszSuffix);
|
|
|
|
ULONGLONG
|
|
RoundingDivide(
|
|
_In_ ULONGLONG Dividend,
|
|
_In_ ULONGLONG Divisor);
|
|
|
|
PWSTR
|
|
DuplicateQuotedString(
|
|
_In_ PWSTR pszInString);
|
|
|
|
PWSTR
|
|
DuplicateString(
|
|
_In_ PWSTR pszInString);
|
|
|
|
/* offline.c */
|
|
BOOL offline_main(INT argc, LPWSTR *argv);
|
|
|
|
/* online.c */
|
|
BOOL online_main(INT argc, LPWSTR *argv);
|
|
|
|
/* partlist.c */
|
|
ULONGLONG
|
|
AlignDown(
|
|
_In_ ULONGLONG Value,
|
|
_In_ ULONG Alignment);
|
|
|
|
NTSTATUS
|
|
CreatePartitionList(VOID);
|
|
|
|
VOID
|
|
DestroyPartitionList(VOID);
|
|
|
|
NTSTATUS
|
|
CreateVolumeList(VOID);
|
|
|
|
VOID
|
|
DestroyVolumeList(VOID);
|
|
|
|
NTSTATUS
|
|
WritePartitions(
|
|
_In_ PDISKENTRY DiskEntry);
|
|
|
|
VOID
|
|
UpdateDiskLayout(
|
|
_In_ PDISKENTRY DiskEntry);
|
|
|
|
PPARTENTRY
|
|
GetPrevUnpartitionedEntry(
|
|
_In_ PPARTENTRY PartEntry);
|
|
|
|
PPARTENTRY
|
|
GetNextUnpartitionedEntry(
|
|
_In_ PPARTENTRY PartEntry);
|
|
|
|
ULONG
|
|
GetPrimaryPartitionCount(
|
|
_In_ PDISKENTRY DiskEntry);
|
|
|
|
NTSTATUS
|
|
DismountVolume(
|
|
_In_ PPARTENTRY PartEntry);
|
|
|
|
PVOLENTRY
|
|
GetVolumeFromPartition(
|
|
_In_ PPARTENTRY PartEntry);
|
|
|
|
VOID
|
|
RemoveVolume(
|
|
_In_ PVOLENTRY VolumeEntry);
|
|
|
|
|
|
/* recover.c */
|
|
BOOL recover_main(INT argc, LPWSTR *argv);
|
|
|
|
/* remove.c */
|
|
BOOL remove_main(INT argc, LPWSTR *argv);
|
|
|
|
/* repair.c */
|
|
BOOL repair_main(INT argc, LPWSTR *argv);
|
|
|
|
/* rescan.c */
|
|
BOOL rescan_main(INT argc, LPWSTR *argv);
|
|
|
|
/* retain.c */
|
|
BOOL retain_main(INT argc, LPWSTR *argv);
|
|
|
|
/* san.c */
|
|
BOOL san_main(INT argc, LPWSTR *argv);
|
|
|
|
/* select.c */
|
|
BOOL
|
|
SelectDisk(
|
|
INT argc,
|
|
PWSTR *argv);
|
|
|
|
BOOL
|
|
SelectPartition(
|
|
INT argc,
|
|
PWSTR *argv);
|
|
|
|
BOOL
|
|
SelectVolume(
|
|
INT argc,
|
|
PWSTR *argv);
|
|
/*
|
|
BOOL
|
|
SelectVirtualDisk(
|
|
INT argc,
|
|
PWSTR *argv);
|
|
*/
|
|
/* setid.c */
|
|
BOOL setid_main(INT argc, LPWSTR *argv);
|
|
|
|
/* shrink.c */
|
|
BOOL shrink_main(INT argc, LPWSTR *argv);
|
|
|
|
/* uniqueid.c */
|
|
BOOL
|
|
UniqueIdDisk(
|
|
_In_ INT argc,
|
|
_In_ PWSTR *argv);
|
|
|
|
#endif /* DISKPART_H */
|