[DISKPART] Implement the 'convert mbr' and 'convert gpt' commands

- Show Disk UUIDs in the 'detail disk' and 'uniqueid disk' commands.
This commit is contained in:
Eric Kohl
2025-12-07 10:09:26 +01:00
parent 1f3f733f6e
commit 920153534b
20 changed files with 1037 additions and 128 deletions

View File

@@ -8,7 +8,184 @@
#include "diskpart.h"
BOOL convert_main(INT argc, LPWSTR *argv)
#define NDEBUG
#include <debug.h>
NTSTATUS
CreateDisk(
_In_ ULONG DiskNumber,
_In_ PCREATE_DISK DiskInfo)
{
WCHAR DstPath[MAX_PATH];
OBJECT_ATTRIBUTES ObjectAttributes;
UNICODE_STRING Name;
HANDLE FileHandle = NULL;
IO_STATUS_BLOCK Iosb;
NTSTATUS Status;
DPRINT1("CreateDisk(%lu %p)\n", DiskNumber, DiskInfo);
StringCchPrintfW(DstPath, ARRAYSIZE(DstPath),
L"\\Device\\Harddisk%lu\\Partition0",
CurrentDisk->DiskNumber);
RtlInitUnicodeString(&Name, DstPath);
InitializeObjectAttributes(&ObjectAttributes,
&Name,
OBJ_CASE_INSENSITIVE,
NULL,
NULL);
Status = NtOpenFile(&FileHandle,
GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE,
&ObjectAttributes,
&Iosb,
0,
FILE_SYNCHRONOUS_IO_NONALERT);
if (!NT_SUCCESS(Status))
{
DPRINT1("NtOpenFile() failed (Status %lx)\n", Status);
goto done;
}
Status = NtDeviceIoControlFile(FileHandle,
NULL,
NULL,
NULL,
&Iosb,
IOCTL_DISK_CREATE_DISK,
DiskInfo,
sizeof(*DiskInfo),
NULL,
0);
if (!NT_SUCCESS(Status))
{
DPRINT1("NtDeviceIoControlFile() failed (Status %lx)\n", Status);
goto done;
}
CurrentDisk->PartitionStyle = DiskInfo->PartitionStyle;
/* Free the layout buffer */
if (CurrentDisk->LayoutBuffer)
{
RtlFreeHeap(RtlGetProcessHeap(), 0, CurrentDisk->LayoutBuffer);
CurrentDisk->LayoutBuffer = NULL;
CurrentDisk->ExtendedPartition = NULL;
}
ReadLayoutBuffer(FileHandle, CurrentDisk);
DPRINT1("PartitionCount: %lu\n", CurrentDisk->LayoutBuffer->PartitionCount);
#ifdef DUMP_PARTITION_TABLE
DumpPartitionTable(CurrentDisk);
#endif
done:
if (FileHandle)
NtClose(FileHandle);
return Status;
}
BOOL
ConvertGPT(
_In_ INT argc,
_In_ PWSTR *argv)
{
CREATE_DISK DiskInfo;
NTSTATUS Status;
DPRINT("ConvertGPT()\n");
if (CurrentDisk == NULL)
{
ConResPuts(StdOut, IDS_SELECT_NO_DISK);
return TRUE;
}
if (CurrentDisk->PartitionStyle == PARTITION_STYLE_GPT)
{
ConResPuts(StdOut, IDS_CONVERT_GPT_ALREADY);
return TRUE;
}
if (CurrentDisk->LayoutBuffer->PartitionCount != 0)
{
ConResPuts(StdOut, IDS_CONVERT_GPT_NOT_EMPTY);
return TRUE;
}
#if 0
/* Fail if disk size is less than 128MB */
if (CurrentDisk->SectorCount.QuadPart * CurrentDisk->BytesPerSector < 128ULL * 1024ULL * 1024ULL)
{
ConResPuts(StdOut, IDS_CONVERT_GPT_TOO_SMALL);
return TRUE;
}
#endif
DiskInfo.PartitionStyle = PARTITION_STYLE_GPT;
CreateGUID(&DiskInfo.Gpt.DiskId);
DiskInfo.Gpt.MaxPartitionCount = 128;
Status = CreateDisk(CurrentDisk->DiskNumber, &DiskInfo);
if (!NT_SUCCESS(Status))
{
}
else
{
ConResPuts(StdOut, IDS_CONVERT_GPT_SUCCESS);
}
return TRUE;
}
BOOL
ConvertMBR(
_In_ INT argc,
_In_ PWSTR *argv)
{
CREATE_DISK DiskInfo;
NTSTATUS Status;
DPRINT("ConvertMBR()\n");
if (CurrentDisk == NULL)
{
ConResPuts(StdOut, IDS_SELECT_NO_DISK);
return TRUE;
}
if ((CurrentDisk->PartitionStyle == PARTITION_STYLE_MBR) ||
(CurrentDisk->PartitionStyle == PARTITION_STYLE_RAW))
{
ConResPuts(StdOut, IDS_CONVERT_MBR_ALREADY);
return TRUE;
}
if (CurrentDisk->LayoutBuffer->PartitionCount != 0)
{
ConResPuts(StdOut, IDS_CONVERT_MBR_NOT_EMPTY);
return TRUE;
}
DiskInfo.PartitionStyle = PARTITION_STYLE_MBR;
CreateSignature(&DiskInfo.Mbr.Signature);
Status = CreateDisk(CurrentDisk->DiskNumber, &DiskInfo);
if (!NT_SUCCESS(Status))
{
}
else
{
ConResPuts(StdOut, IDS_CONVERT_MBR_SUCCESS);
}
return TRUE;
}

View File

@@ -72,6 +72,7 @@ DetailDisk(
PLIST_ENTRY Entry;
PVOLENTRY VolumeEntry;
BOOL bPrintHeader = TRUE;
WCHAR szBuffer[40];
DPRINT("DetailDisk()\n");
@@ -89,7 +90,13 @@ DetailDisk(
/* TODO: Print more disk details */
ConPuts(StdOut, L"\n");
ConResPrintf(StdOut, IDS_DETAIL_INFO_DISK_ID, CurrentDisk->LayoutBuffer->Mbr.Signature);
if (CurrentDisk->LayoutBuffer->PartitionStyle == PARTITION_STYLE_GPT)
PrintGUID(szBuffer, &CurrentDisk->LayoutBuffer->Gpt.DiskId);
else if (CurrentDisk->LayoutBuffer->PartitionStyle == PARTITION_STYLE_MBR)
swprintf(szBuffer, L"%08lx", CurrentDisk->LayoutBuffer->Mbr.Signature);
else
wcscpy(szBuffer, L"00000000");
ConResPrintf(StdOut, IDS_DETAIL_INFO_DISK_ID, szBuffer);
ConResPrintf(StdOut, IDS_DETAIL_INFO_PATH, CurrentDisk->PathId);
ConResPrintf(StdOut, IDS_DETAIL_INFO_TARGET, CurrentDisk->TargetId);
ConResPrintf(StdOut, IDS_DETAIL_INFO_LUN_ID, CurrentDisk->Lun);

View File

@@ -20,6 +20,7 @@
#include <winreg.h>
#include <wincon.h>
#include <winioctl.h>
#include <ntsecapi.h>
#include <errno.h>
#include <strsafe.h>
@@ -52,6 +53,8 @@
#include "resource.h"
//#define DUMP_PARTITION_TABLE
/* DEFINES *******************************************************************/
typedef struct _COMMAND
@@ -246,7 +249,20 @@ BOOL clean_main(INT argc, LPWSTR *argv);
BOOL compact_main(INT argc, LPWSTR *argv);
/* convert.c */
BOOL convert_main(INT argc, LPWSTR *argv);
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);
/* create.c */
BOOL
@@ -405,6 +421,19 @@ PWSTR
DuplicateString(
_In_ PWSTR pszInString);
VOID
CreateGUID(
_Out_ GUID *pGuid);
VOID
CreateSignature(
_Out_ PDWORD pSignature);
VOID
PrintGUID(
_Out_ PWSTR pszBuffer,
_In_ GUID *pGuid);
/* offline.c */
BOOL offline_main(INT argc, LPWSTR *argv);
@@ -412,6 +441,12 @@ BOOL offline_main(INT argc, LPWSTR *argv);
BOOL online_main(INT argc, LPWSTR *argv);
/* partlist.c */
#ifdef DUMP_PARTITION_TABLE
VOID
DumpPartitionTable(
_In_ PDISKENTRY DiskEntry);
#endif
ULONGLONG
AlignDown(
_In_ ULONGLONG Value,
@@ -429,6 +464,11 @@ CreateVolumeList(VOID);
VOID
DestroyVolumeList(VOID);
VOID
ReadLayoutBuffer(
_In_ HANDLE FileHandle,
_In_ PDISKENTRY DiskEntry);
NTSTATUS
WritePartitions(
_In_ PDISKENTRY DiskEntry);

View File

@@ -740,38 +740,440 @@ Language=Taiwanese
MessageId=10010
SymbolicName=MSG_COMMAND_CONVERT
SymbolicName=MSG_COMMAND_CONVERT_GPT
Severity=Informational
Facility=System
Language=English
<Add CONVERT command help text here>
Converts a disk with an MBR (Master Boot Record) partition table
into a disk with a GPT (GUID partititon table) partititon table.
Syntax: CONVERT GPT [NOERR]
NOERR For scripting only. When an error is encountered, DiskPart
continues to process commands as if the error did not occur.
Without the NOERR parameter, an error causes DiskPart to exit
with an error code.
An MBR disk must be selected for this operation to succeed.
The disk must have a minimum size of 128 MB.
Important:
Only empty disks can be converted to GPT. Backup all data and delete all
partitions or volumes before you convert the disk.
Example:
CONVERT GPT
.
Language=German
<Add CONVERT command help text here>
Konvertiert einen Datenträger mit MBR (Master Boot Record) Partitionstabelle
in einen Datenträger mit GPT (GUID Partititionstabelle) Partititonstabelle.
Syntax: CONVERT GPT [NOERR]
NOERR Nur für Skripting. Bei einem Fehler setzt DiskPart die
Verarbeitung von Befehlen fort, als sei der Fehler nicht
aufgetreten.
Ohne den Parameter NOERR wird DiskPart bei einem Fehler mit
dem entsprechenden Fehlercode beendet.
Damit dieser Vorgang erfolgreich ausgeführt werden kann, muss ein
MBR-Datenträger ausgewählt sein.
Der Datenträger muss eine minimale Größe von 128 MB haben.
Wichtig:
Nur ein leerer Datenträger kann in einen GPT-Datenträger konvertiert
werden. Sichern Sie alle Daten und löschen Sie alle Partitionen und
Volumes bevor Sie den Datenträger konvertieres.
Beispiel:
CONVERT GPT
.
Language=Polish
<Add CONVERT command help text here>
Converts a disk with an MBR (Master Boot Record) partition table
into a disk with a GPT (GUID partititon table) partititon table.
Syntax: CONVERT GPT [NOERR]
NOERR For scripting only. When an error is encountered, DiskPart
continues to process commands as if the error did not occur.
Without the NOERR parameter, an error causes DiskPart to exit
with an error code.
An MBR disk must be selected for this operation to succeed.
The disk must have a minimum size of 128 MB.
Important:
Only empty disks can be converted to GPT. Backup all data and delete all
partitions or volumes before you convert the disk.
Example:
CONVERT GPT
.
Language=Portugese
<Add CONVERT command help text here>
Converts a disk with an MBR (Master Boot Record) partition table
into a disk with a GPT (GUID partititon table) partititon table.
Syntax: CONVERT GPT [NOERR]
NOERR For scripting only. When an error is encountered, DiskPart
continues to process commands as if the error did not occur.
Without the NOERR parameter, an error causes DiskPart to exit
with an error code.
An MBR disk must be selected for this operation to succeed.
The disk must have a minimum size of 128 MB.
Important:
Only empty disks can be converted to GPT. Backup all data and delete all
partitions or volumes before you convert the disk.
Example:
CONVERT GPT
.
Language=Romanian
<Adăugați aici textul de ajutor pentru comanda CONVERT>
Converts a disk with an MBR (Master Boot Record) partition table
into a disk with a GPT (GUID partititon table) partititon table.
Syntax: CONVERT GPT [NOERR]
NOERR For scripting only. When an error is encountered, DiskPart
continues to process commands as if the error did not occur.
Without the NOERR parameter, an error causes DiskPart to exit
with an error code.
An MBR disk must be selected for this operation to succeed.
The disk must have a minimum size of 128 MB.
Important:
Only empty disks can be converted to GPT. Backup all data and delete all
partitions or volumes before you convert the disk.
Example:
CONVERT GPT
.
Language=Russian
<Add CONVERT command help text here>
Converts a disk with an MBR (Master Boot Record) partition table
into a disk with a GPT (GUID partititon table) partititon table.
Syntax: CONVERT GPT [NOERR]
NOERR For scripting only. When an error is encountered, DiskPart
continues to process commands as if the error did not occur.
Without the NOERR parameter, an error causes DiskPart to exit
with an error code.
An MBR disk must be selected for this operation to succeed.
The disk must have a minimum size of 128 MB.
Important:
Only empty disks can be converted to GPT. Backup all data and delete all
partitions or volumes before you convert the disk.
Example:
CONVERT GPT
.
Language=Albanian
<Add CONVERT command help text here>
Converts a disk with an MBR (Master Boot Record) partition table
into a disk with a GPT (GUID partititon table) partititon table.
Syntax: CONVERT GPT [NOERR]
NOERR For scripting only. When an error is encountered, DiskPart
continues to process commands as if the error did not occur.
Without the NOERR parameter, an error causes DiskPart to exit
with an error code.
An MBR disk must be selected for this operation to succeed.
The disk must have a minimum size of 128 MB.
Important:
Only empty disks can be converted to GPT. Backup all data and delete all
partitions or volumes before you convert the disk.
Example:
CONVERT GPT
.
Language=Turkish
<Add CONVERT command help text here>
Converts a disk with an MBR (Master Boot Record) partition table
into a disk with a GPT (GUID partititon table) partititon table.
Syntax: CONVERT GPT [NOERR]
NOERR For scripting only. When an error is encountered, DiskPart
continues to process commands as if the error did not occur.
Without the NOERR parameter, an error causes DiskPart to exit
with an error code.
An MBR disk must be selected for this operation to succeed.
The disk must have a minimum size of 128 MB.
Important:
Only empty disks can be converted to GPT. Backup all data and delete all
partitions or volumes before you convert the disk.
Example:
CONVERT GPT
.
Language=Chinese
<Add CONVERT command help text here>
Converts a disk with an MBR (Master Boot Record) partition table
into a disk with a GPT (GUID partititon table) partititon table.
Syntax: CONVERT GPT [NOERR]
NOERR For scripting only. When an error is encountered, DiskPart
continues to process commands as if the error did not occur.
Without the NOERR parameter, an error causes DiskPart to exit
with an error code.
An MBR disk must be selected for this operation to succeed.
The disk must have a minimum size of 128 MB.
Important:
Only empty disks can be converted to GPT. Backup all data and delete all
partitions or volumes before you convert the disk.
Example:
CONVERT GPT
.
Language=Taiwanese
<Add CONVERT command help text here>
Converts a disk with an MBR (Master Boot Record) partition table
into a disk with a GPT (GUID partititon table) partititon table.
Syntax: CONVERT GPT [NOERR]
NOERR For scripting only. When an error is encountered, DiskPart
continues to process commands as if the error did not occur.
Without the NOERR parameter, an error causes DiskPart to exit
with an error code.
An MBR disk must be selected for this operation to succeed.
The disk must have a minimum size of 128 MB.
Important:
Only empty disks can be converted to GPT. Backup all data and delete all
partitions or volumes before you convert the disk.
Example:
CONVERT GPT
.
MessageId=10011
SymbolicName=MSG_COMMAND_CONVERT_MBR
Severity=Informational
Facility=System
Language=English
Converts a disk with a GPT (GUID partititon table) partition table
into a disk with an MBR (Master Boot Record) partititon table.
Syntax: CONVERT MBR [NOERR]
NOERR For scripting only. When an error is encountered, DiskPart
continues to process commands as if the error did not occur.
Without the NOERR parameter, an error causes DiskPart to exit
with an error code.
A GPT disk must be selected for this operation to succeed.
Important:
Only empty disks can be converted to MBR. Backup all data and delete all
partitions or volumes before you convert the disk.
Example:
CONVERT MBR
.
Language=German
Konvertiert einen Datenträger mit GPT (GUID Partititionstabelle) Partitionstabelle
in einen Datenträger mit MBR (Master Boot Record) Partititonstabelle.
Syntax: CONVERT MBR [NOERR]
NOERR Nur für Skripting. Bei einem Fehler setzt DiskPart die
Verarbeitung von Befehlen fort, als sei der Fehler nicht
aufgetreten.
Ohne den Parameter NOERR wird DiskPart bei einem Fehler mit
dem entsprechenden Fehlercode beendet.
Damit dieser Vorgang erfolgreich ausgeführt werden kann, muss ein
GPT-Datenträger ausgewählt sein.
Wichtig:
Nur ein leerer Datenträger kann in einen MBR-Datenträger konvertiert
werden. Sichern Sie alle Daten und löschen Sie alle Partitionen und
Volumes bevor Sie den Datenträger konvertieres.
Beispiel:
CONVERT MBR
.
Language=Polish
Converts a disk with a GPT (GUID partititon table) partition table
into a disk with an MBR (Master Boot Record) partititon table.
Syntax: CONVERT MBR [NOERR]
NOERR For scripting only. When an error is encountered, DiskPart
continues to process commands as if the error did not occur.
Without the NOERR parameter, an error causes DiskPart to exit
with an error code.
A GPT disk must be selected for this operation to succeed.
Important:
Only empty disks can be converted to MBR. Backup all data and delete all
partitions or volumes before you convert the disk.
Example:
CONVERT MBR
.
Language=Portugese
Converts a disk with a GPT (GUID partititon table) partition table
into a disk with an MBR (Master Boot Record) partititon table.
Syntax: CONVERT MBR [NOERR]
NOERR For scripting only. When an error is encountered, DiskPart
continues to process commands as if the error did not occur.
Without the NOERR parameter, an error causes DiskPart to exit
with an error code.
A GPT disk must be selected for this operation to succeed.
Important:
Only empty disks can be converted to MBR. Backup all data and delete all
partitions or volumes before you convert the disk.
Example:
CONVERT MBR
.
Language=Romanian
Converts a disk with a GPT (GUID partititon table) partition table
into a disk with an MBR (Master Boot Record) partititon table.
Syntax: CONVERT MBR [NOERR]
NOERR For scripting only. When an error is encountered, DiskPart
continues to process commands as if the error did not occur.
Without the NOERR parameter, an error causes DiskPart to exit
with an error code.
A GPT disk must be selected for this operation to succeed.
Important:
Only empty disks can be converted to MBR. Backup all data and delete all
partitions or volumes before you convert the disk.
Example:
CONVERT MBR
.
Language=Russian
Converts a disk with a GPT (GUID partititon table) partition table
into a disk with an MBR (Master Boot Record) partititon table.
Syntax: CONVERT MBR [NOERR]
NOERR For scripting only. When an error is encountered, DiskPart
continues to process commands as if the error did not occur.
Without the NOERR parameter, an error causes DiskPart to exit
with an error code.
A GPT disk must be selected for this operation to succeed.
Important:
Only empty disks can be converted to MBR. Backup all data and delete all
partitions or volumes before you convert the disk.
Example:
CONVERT MBR
.
Language=Albanian
Converts a disk with a GPT (GUID partititon table) partition table
into a disk with an MBR (Master Boot Record) partititon table.
Syntax: CONVERT MBR [NOERR]
NOERR For scripting only. When an error is encountered, DiskPart
continues to process commands as if the error did not occur.
Without the NOERR parameter, an error causes DiskPart to exit
with an error code.
A GPT disk must be selected for this operation to succeed.
Important:
Only empty disks can be converted to MBR. Backup all data and delete all
partitions or volumes before you convert the disk.
Example:
CONVERT MBR
.
Language=Turkish
Converts a disk with a GPT (GUID partititon table) partition table
into a disk with an MBR (Master Boot Record) partititon table.
Syntax: CONVERT MBR [NOERR]
NOERR For scripting only. When an error is encountered, DiskPart
continues to process commands as if the error did not occur.
Without the NOERR parameter, an error causes DiskPart to exit
with an error code.
A GPT disk must be selected for this operation to succeed.
Important:
Only empty disks can be converted to MBR. Backup all data and delete all
partitions or volumes before you convert the disk.
Example:
CONVERT MBR
.
Language=Chinese
Converts a disk with a GPT (GUID partititon table) partition table
into a disk with an MBR (Master Boot Record) partititon table.
Syntax: CONVERT MBR [NOERR]
NOERR For scripting only. When an error is encountered, DiskPart
continues to process commands as if the error did not occur.
Without the NOERR parameter, an error causes DiskPart to exit
with an error code.
A GPT disk must be selected for this operation to succeed.
Important:
Only empty disks can be converted to MBR. Backup all data and delete all
partitions or volumes before you convert the disk.
Example:
CONVERT MBR
.
Language=Taiwanese
Converts a disk with a GPT (GUID partititon table) partition table
into a disk with an MBR (Master Boot Record) partititon table.
Syntax: CONVERT MBR [NOERR]
NOERR For scripting only. When an error is encountered, DiskPart
continues to process commands as if the error did not occur.
Without the NOERR parameter, an error causes DiskPart to exit
with an error code.
A GPT disk must be selected for this operation to succeed.
Important:
Only empty disks can be converted to MBR. Backup all data and delete all
partitions or volumes before you convert the disk.
Example:
CONVERT MBR
.

View File

@@ -25,7 +25,10 @@ COMMAND cmds[] =
{L"BREAK", NULL, NULL, break_main, IDS_HELP_BREAK, MSG_COMMAND_BREAK},
{L"CLEAN", NULL, NULL, clean_main, IDS_HELP_CLEAN, MSG_COMMAND_CLEAN},
{L"COMPACT", NULL, NULL, compact_main, IDS_HELP_COMPACT, MSG_COMMAND_COMPACT},
{L"CONVERT", NULL, NULL, convert_main, IDS_HELP_CONVERT, MSG_COMMAND_CONVERT},
{L"CONVERT", NULL, NULL, NULL, IDS_HELP_CONVERT, MSG_NONE},
{L"CONVERT", L"GPT", NULL, ConvertGPT, IDS_HELP_CONVERT_GPT, MSG_COMMAND_CONVERT_GPT},
{L"CONVERT", L"MBR", NULL, ConvertMBR, IDS_HELP_CONVERT_MBR, MSG_COMMAND_CONVERT_MBR},
{L"CREATE", NULL, NULL, NULL, IDS_HELP_CREATE, MSG_NONE},
{L"CREATE", L"PARTITION", NULL, NULL, IDS_HELP_CREATE_PARTITION, MSG_NONE},

View File

@@ -29,6 +29,16 @@ BEGIN
IDS_CLEAN_SYSTEM "\nDer gewählte Datenträger ist zum Ausführen des Computers erforderlich und kann nicht bereinigt werden.\n"
END
STRINGTABLE
BEGIN
IDS_CONVERT_GPT_ALREADY "\nThe selected Disk can not be converted because it has already been GPT formatted.\n"
IDS_CONVERT_GPT_NOT_EMPTY "\nThe selected Disk can not be converted to the GPT format.\nSelect an empty disk for conversion.\n"
IDS_CONVERT_GPT_SUCCESS "\nThe selected Disk was successfully converted to the GPT format.\n"
IDS_CONVERT_MBR_ALREADY "\nThe selected Disk can not be converted because it has already been MBR formatted.\n"
IDS_CONVERT_MBR_NOT_EMPTY "\nThe selected Disk can not be converted to the MBR format.\nSelect an empty disk for conversion.\n"
IDS_CONVERT_MBR_SUCCESS "\nThe selected Disk was successfully converted to the MBR format.\n"
END
STRINGTABLE
BEGIN
IDS_CREATE_PARTITION_FAIL "\nDie angegebene Partition konnte nicht erstellt werden.\n"
@@ -44,7 +54,7 @@ END
/* Disk Information Labels */
STRINGTABLE
BEGIN
IDS_DETAIL_INFO_DISK_ID "Disk ID: %08lx\n"
IDS_DETAIL_INFO_DISK_ID "Disk ID: %s\n"
IDS_DETAIL_INFO_TYPE "Type"
IDS_DETAIL_INFO_STATUS "Status"
IDS_DETAIL_INFO_PATH "Path : %hu\n"
@@ -165,7 +175,10 @@ BEGIN
IDS_HELP_BREAK "Teilt eine Spiegelung auf.\n"
IDS_HELP_CLEAN "Löscht die Konfigurationsinformationen oder alle\n Informationen vom Datenträger.\n"
IDS_HELP_COMPACT "Versucht, die physische Größe der Datei zu reduzieren.\n"
IDS_HELP_CONVERT "Konvertiert zwischen Datenträgerformaten.\n"
IDS_HELP_CONVERT_GPT "Converts an MBR disk to the GPT format.\n"
IDS_HELP_CONVERT_MBR "Converts a GPT disk to the MBR format.\n"
IDS_HELP_CREATE "Erstellt ein Volume, eine Partition oder einen virtuellen\n Datenträger.\n"
IDS_HELP_CREATE_PARTITION "Erstellt eine Partition.\n"

View File

@@ -29,6 +29,16 @@ BEGIN
IDS_CLEAN_SYSTEM "\nThe selected disk is neccessary to the operation of your computer, and may not be cleaned.\n"
END
STRINGTABLE
BEGIN
IDS_CONVERT_GPT_ALREADY "\nThe selected Disk can not be converted because it has already been GPT formatted.\n"
IDS_CONVERT_GPT_NOT_EMPTY "\nThe selected Disk can not be converted to the GPT format.\nSelect an empty disk for conversion.\n"
IDS_CONVERT_GPT_SUCCESS "\nThe selected Disk was successfully converted to the GPT format.\n"
IDS_CONVERT_MBR_ALREADY "\nThe selected Disk can not be converted because it has already been MBR formatted.\n"
IDS_CONVERT_MBR_NOT_EMPTY "\nThe selected Disk can not be converted to the MBR format.\nSelect an empty disk for conversion.\n"
IDS_CONVERT_MBR_SUCCESS "\nThe selected Disk was successfully converted to the MBR format.\n"
END
STRINGTABLE
BEGIN
IDS_CREATE_PARTITION_FAIL "\nDiskPart was unable to create the specified partition.\n"
@@ -44,7 +54,7 @@ END
/* Disk Information Labels */
STRINGTABLE
BEGIN
IDS_DETAIL_INFO_DISK_ID "Disk ID: %08lx\n"
IDS_DETAIL_INFO_DISK_ID "Disk ID: %s\n"
IDS_DETAIL_INFO_TYPE "Type"
IDS_DETAIL_INFO_STATUS "Status"
IDS_DETAIL_INFO_PATH "Path : %hu\n"
@@ -165,7 +175,10 @@ BEGIN
IDS_HELP_BREAK "Break a mirror set.\n"
IDS_HELP_CLEAN "Clear the configuration information, or all information, off\n the disk.\n"
IDS_HELP_COMPACT "Attempts to reduce the physical size of the file.\n"
IDS_HELP_CONVERT "Convert between different disk formats.\n"
IDS_HELP_CONVERT "Converts between different disk formats.\n"
IDS_HELP_CONVERT_GPT "Converts an MBR disk to the GPT format.\n"
IDS_HELP_CONVERT_MBR "Converts a GPT disk to the MBR format.\n"
IDS_HELP_CREATE "Create a volume, partition, or virtual disk.\n"
IDS_HELP_CREATE_PARTITION "Create a partition.\n"

View File

@@ -36,6 +36,16 @@ BEGIN
IDS_CLEAN_SYSTEM "\nIl disco selezionato è necessario per il funzionamento del computer e non può essere pulito.\n"
END
STRINGTABLE
BEGIN
IDS_CONVERT_GPT_ALREADY "\nThe selected Disk can not be converted because it has already been GPT formatted.\n"
IDS_CONVERT_GPT_NOT_EMPTY "\nThe selected Disk can not be converted to the GPT format.\nSelect an empty MBR Disk for conversion.\n"
IDS_CONVERT_GPT_SUCCESS "\nThe selected Disk was successfully converted to the GPT format.\n"
IDS_CONVERT_MBR_ALREADY "\nThe selected Disk can not be converted because it has already been MBR formatted.\n"
IDS_CONVERT_MBR_NOT_EMPTY "\nThe selected Disk can not be converted to the MBR format.\nSelect an empty GPT Disk for conversion.\n"
IDS_CONVERT_MBR_SUCCESS "\nThe selected Disk was successfully converted to the MBR format.\n"
END
STRINGTABLE
BEGIN
IDS_CREATE_PARTITION_FAIL "\nDiskPart non è stato in grado di creare la partizione specificata.\n"
@@ -51,7 +61,7 @@ END
/* Disk Information Labels */
STRINGTABLE
BEGIN
IDS_DETAIL_INFO_DISK_ID "ID Disco: %08lx\n"
IDS_DETAIL_INFO_DISK_ID "ID Disco: %s\n"
IDS_DETAIL_INFO_TYPE "Tipo"
IDS_DETAIL_INFO_STATUS "Stato"
IDS_DETAIL_INFO_PATH "Percorso : %hu\n"
@@ -172,7 +182,10 @@ BEGIN
IDS_HELP_BREAK "Interrompi la replicazione su un disco mirror.\n"
IDS_HELP_CLEAN "Cancella le informazioni sulla configurazione o tutte le informazioni dal\n disco.\n"
IDS_HELP_COMPACT "Tenta di ridurre la grandezza fisica del file.\n"
IDS_HELP_CONVERT "Converti tra formati dischi differenti.\n"
IDS_HELP_CONVERT_GPT "Converts an MBR disk to the GPT format.\n"
IDS_HELP_CONVERT_MBR "Converts a GPT disk to the MBR format.\n"
IDS_HELP_CREATE "Crea volume, partizione o disco virtuale.\n"
IDS_HELP_CREATE_PARTITION "Crea una partizione.\n"

View File

@@ -29,6 +29,16 @@ BEGIN
IDS_CLEAN_SYSTEM "\nWybrany dysk jest niezbędny do działania tego komputera, nie może być wyczyszczony.\n"
END
STRINGTABLE
BEGIN
IDS_CONVERT_GPT_ALREADY "\nThe selected Disk can not be converted because it has already been GPT formatted.\n"
IDS_CONVERT_GPT_NOT_EMPTY "\nThe selected Disk can not be converted to the GPT format.\nSelect an empty MBR Disk for conversion.\n"
IDS_CONVERT_GPT_SUCCESS "\nThe selected Disk was successfully converted to the GPT format.\n"
IDS_CONVERT_MBR_ALREADY "\nThe selected Disk can not be converted because it has already been MBR formatted.\n"
IDS_CONVERT_MBR_NOT_EMPTY "\nThe selected Disk can not be converted to the MBR format.\nSelect an empty GPT Disk for conversion.\n"
IDS_CONVERT_MBR_SUCCESS "\nThe selected Disk was successfully converted to the MBR format.\n"
END
STRINGTABLE
BEGIN
IDS_CREATE_PARTITION_FAIL "\nDiskPart nie może utworzyć określonej partycji.\n"
@@ -44,7 +54,7 @@ END
/* Disk Information Labels */
STRINGTABLE
BEGIN
IDS_DETAIL_INFO_DISK_ID "Dysk ID: %08lx\n"
IDS_DETAIL_INFO_DISK_ID "Dysk ID: %s\n"
IDS_DETAIL_INFO_TYPE "Typ"
IDS_DETAIL_INFO_STATUS "Stan"
IDS_DETAIL_INFO_PATH "Ścieżka : %hu\n"
@@ -165,7 +175,10 @@ BEGIN
IDS_HELP_BREAK "Dzieli zestaw dublowania.\n"
IDS_HELP_CLEAN "Usuń informacje o konfiguracji lub wszystkie informacje\n z dysku.\n"
IDS_HELP_COMPACT "Próbuje zmniejszyć fizyczny rozmiaru pliku.\n"
IDS_HELP_CONVERT "Konwertuje między różnymi formatami dysków.\n"
IDS_HELP_CONVERT_GPT "Converts an MBR disk to the GPT format.\n"
IDS_HELP_CONVERT_MBR "Converts a GPT disk to the MBR format.\n"
IDS_HELP_CREATE "Tworzy wolumin, partycję, lub dysk wirtualny.\n"
IDS_HELP_CREATE_PARTITION "Tworzy partycję.\n"

View File

@@ -31,6 +31,16 @@ BEGIN
IDS_CLEAN_SYSTEM "\nThe selected disk is neccessary to the operation of your computer, and may not be cleaned.\n"
END
STRINGTABLE
BEGIN
IDS_CONVERT_GPT_ALREADY "\nThe selected Disk can not be converted because it has already been GPT formatted.\n"
IDS_CONVERT_GPT_NOT_EMPTY "\nThe selected Disk can not be converted to the GPT format.\nSelect an empty MBR Disk for conversion.\n"
IDS_CONVERT_GPT_SUCCESS "\nThe selected Disk was successfully converted to the GPT format.\n"
IDS_CONVERT_MBR_ALREADY "\nThe selected Disk can not be converted because it has already been MBR formatted.\n"
IDS_CONVERT_MBR_NOT_EMPTY "\nThe selected Disk can not be converted to the MBR format.\nSelect an empty GPT Disk for conversion.\n"
IDS_CONVERT_MBR_SUCCESS "\nThe selected Disk was successfully converted to the MBR format.\n"
END
STRINGTABLE
BEGIN
IDS_CREATE_PARTITION_FAIL "\nDiskPart was unable to create the specified partition.\n"
@@ -46,7 +56,7 @@ END
/* Disk Information Labels */
STRINGTABLE
BEGIN
IDS_DETAIL_INFO_DISK_ID "Disco ID: %08lx\n"
IDS_DETAIL_INFO_DISK_ID "Disco ID: %s\n"
IDS_DETAIL_INFO_TYPE "Tipo"
IDS_DETAIL_INFO_STATUS "Estado"
IDS_DETAIL_INFO_PATH "Caminho : %hu\n"
@@ -167,7 +177,10 @@ BEGIN
IDS_HELP_BREAK "Quebrar duplição.\n"
IDS_HELP_CLEAN "Apagar a informção de configuração, or toda a informção, desliga\n o disco.\n"
IDS_HELP_COMPACT "Tenta reduzir o tamanho físico do ficheiro.\n"
IDS_HELP_CONVERT "Converter entre diferentes formatos.\n"
IDS_HELP_CONVERT_GPT "Converts an MBR disk to the GPT format.\n"
IDS_HELP_CONVERT_MBR "Converts a GPT disk to the MBR format.\n"
IDS_HELP_CREATE "Criar volume,partição ou disco virtual.\n"
IDS_HELP_CREATE_PARTITION "Create a partition.\n"

View File

@@ -37,6 +37,16 @@ BEGIN
IDS_CLEAN_SYSTEM "\nDiscul selectat este necesar pentru funcționarea calculatorului dumneavoastră și este posibil să nu fie curățat.\n"
END
STRINGTABLE
BEGIN
IDS_CONVERT_GPT_ALREADY "\nThe selected Disk can not be converted because it has already been GPT formatted.\n"
IDS_CONVERT_GPT_NOT_EMPTY "\nThe selected Disk can not be converted to the GPT format.\nSelect an empty MBR Disk for conversion.\n"
IDS_CONVERT_GPT_SUCCESS "\nThe selected Disk was successfully converted to the GPT format.\n"
IDS_CONVERT_MBR_ALREADY "\nThe selected Disk can not be converted because it has already been MBR formatted.\n"
IDS_CONVERT_MBR_NOT_EMPTY "\nThe selected Disk can not be converted to the MBR format.\nSelect an empty GPT Disk for conversion.\n"
IDS_CONVERT_MBR_SUCCESS "\nThe selected Disk was successfully converted to the MBR format.\n"
END
STRINGTABLE
BEGIN
IDS_CREATE_PARTITION_FAIL "\nDiskPart nu a reușit să creeze partiția specificată.\n"
@@ -52,7 +62,7 @@ END
/* Disk Information Labels */
STRINGTABLE
BEGIN
IDS_DETAIL_INFO_DISK_ID "Disc ID: %08lx\n"
IDS_DETAIL_INFO_DISK_ID "Disc ID: %s\n"
IDS_DETAIL_INFO_TYPE "Tip"
IDS_DETAIL_INFO_STATUS "Stare"
IDS_DETAIL_INFO_PATH "Cale : %hu\n"
@@ -173,7 +183,10 @@ BEGIN
IDS_HELP_BREAK "Șterge configurația în oglindă.\n"
IDS_HELP_CLEAN "Elimină informațiile de configurare, sau toate informațiile,\n de pe disc.\n"
IDS_HELP_COMPACT "Încearcă reducerea dimensiunii fizice a fișierului.\n"
IDS_HELP_CONVERT "Convertește în diverse formate de disc.\n"
IDS_HELP_CONVERT_GPT "Converts an MBR disk to the GPT format.\n"
IDS_HELP_CONVERT_MBR "Converts a GPT disk to the MBR format.\n"
IDS_HELP_CREATE "Crează un volum, o partiție, sau un disc virtual.\n"
IDS_HELP_CREATE_PARTITION "Creează o partiție.\n"

View File

@@ -31,6 +31,16 @@ BEGIN
IDS_CLEAN_SYSTEM "\nThe selected disk is neccessary to the operation of your computer, and may not be cleaned.\n"
END
STRINGTABLE
BEGIN
IDS_CONVERT_GPT_ALREADY "\nThe selected Disk can not be converted because it has already been GPT formatted.\n"
IDS_CONVERT_GPT_NOT_EMPTY "\nThe selected Disk can not be converted to the GPT format.\nSelect an empty MBR Disk for conversion.\n"
IDS_CONVERT_GPT_SUCCESS "\nThe selected Disk was successfully converted to the GPT format.\n"
IDS_CONVERT_MBR_ALREADY "\nThe selected Disk can not be converted because it has already been MBR formatted.\n"
IDS_CONVERT_MBR_NOT_EMPTY "\nThe selected Disk can not be converted to the MBR format.\nSelect an empty GPT Disk for conversion.\n"
IDS_CONVERT_MBR_SUCCESS "\nThe selected Disk was successfully converted to the MBR format.\n"
END
STRINGTABLE
BEGIN
IDS_CREATE_PARTITION_FAIL "\nDiskPart was unable to create the specified partition.\n"
@@ -46,7 +56,7 @@ END
/* Disk Information Labels */
STRINGTABLE
BEGIN
IDS_DETAIL_INFO_DISK_ID "Disk ID: %08lx\n"
IDS_DETAIL_INFO_DISK_ID "Disk ID: %s\n"
IDS_DETAIL_INFO_TYPE "Тип"
IDS_DETAIL_INFO_STATUS "Состояние"
IDS_DETAIL_INFO_PATH "Path : %hu\n"
@@ -167,7 +177,10 @@ BEGIN
IDS_HELP_BREAK "Разбиение зеркального набора.\n"
IDS_HELP_CLEAN "Очистка сведений о конфигурации или всех данных на диске.\n"
IDS_HELP_COMPACT "Попытки уменьшения физического размера файла.\n"
IDS_HELP_CONVERT "Преобразование форматов диска.\n"
IDS_HELP_CONVERT_GPT "Converts an MBR disk to the GPT format.\n"
IDS_HELP_CONVERT_MBR "Converts a GPT disk to the MBR format.\n"
IDS_HELP_CREATE "Создание тома, раздела или виртуального диска.\n"
IDS_HELP_CREATE_PARTITION "Create a partition.\n"

View File

@@ -33,6 +33,16 @@ BEGIN
IDS_CLEAN_SYSTEM "\nThe selected disk is neccessary to the operation of your computer, and may not be cleaned.\n"
END
STRINGTABLE
BEGIN
IDS_CONVERT_GPT_ALREADY "\nThe selected Disk can not be converted because it has already been GPT formatted.\n"
IDS_CONVERT_GPT_NOT_EMPTY "\nThe selected Disk can not be converted to the GPT format.\nSelect an empty MBR Disk for conversion.\n"
IDS_CONVERT_GPT_SUCCESS "\nThe selected Disk was successfully converted to the GPT format.\n"
IDS_CONVERT_MBR_ALREADY "\nThe selected Disk can not be converted because it has already been MBR formatted.\n"
IDS_CONVERT_MBR_NOT_EMPTY "\nThe selected Disk can not be converted to the MBR format.\nSelect an empty GPT Disk for conversion.\n"
IDS_CONVERT_MBR_SUCCESS "\nThe selected Disk was successfully converted to the MBR format.\n"
END
STRINGTABLE
BEGIN
IDS_CREATE_PARTITION_FAIL "\nDiskPart was unable to create the specified partition.\n"
@@ -48,7 +58,7 @@ END
/* Disk Information Labels */
STRINGTABLE
BEGIN
IDS_DETAIL_INFO_DISK_ID "Disk ID: %08lx\n"
IDS_DETAIL_INFO_DISK_ID "Disk ID: %s\n"
IDS_DETAIL_INFO_TYPE "Tipi"
IDS_DETAIL_INFO_STATUS "Gjendja"
IDS_DETAIL_INFO_PATH "Path : %hu\n"
@@ -169,7 +179,10 @@ BEGIN
IDS_HELP_BREAK "Thyen nje sere lidhjesh.\n"
IDS_HELP_CLEAN "Pastron iformacionet e konfigurimit, ose të gjitha informacionet, e\n diskut.\n"
IDS_HELP_COMPACT "Tenton te ul masen fizike te dokumentit.\n"
IDS_HELP_CONVERT "Konverton formatet e ndryshme ne disk.\n"
IDS_HELP_CONVERT_GPT "Converts an MBR disk to the GPT format.\n"
IDS_HELP_CONVERT_MBR "Converts a GPT disk to the MBR format.\n"
IDS_HELP_CREATE "Krijon një volum, particion, ose disk virtual.\n"
IDS_HELP_CREATE_PARTITION "Create a partition.\n"

View File

@@ -39,6 +39,16 @@ BEGIN
IDS_CLEAN_SYSTEM "\nSeçilen disk, bilgisayarınızın çalışması için gereklidir ve temizlenemez.\n"
END
STRINGTABLE
BEGIN
IDS_CONVERT_GPT_ALREADY "\nThe selected Disk can not be converted because it has already been GPT formatted.\n"
IDS_CONVERT_GPT_NOT_EMPTY "\nThe selected Disk can not be converted to the GPT format.\nSelect an empty MBR Disk for conversion.\n"
IDS_CONVERT_GPT_SUCCESS "\nThe selected Disk was successfully converted to the GPT format.\n"
IDS_CONVERT_MBR_ALREADY "\nThe selected Disk can not be converted because it has already been MBR formatted.\n"
IDS_CONVERT_MBR_NOT_EMPTY "\nThe selected Disk can not be converted to the MBR format.\nSelect an empty GPT Disk for conversion.\n"
IDS_CONVERT_MBR_SUCCESS "\nThe selected Disk was successfully converted to the MBR format.\n"
END
STRINGTABLE
BEGIN
IDS_CREATE_PARTITION_FAIL "\nDiskPart belirtilen bölümü oluşturamadı.\n"
@@ -54,7 +64,7 @@ END
/* Disk Information Labels */
STRINGTABLE
BEGIN
IDS_DETAIL_INFO_DISK_ID "Disk ID: %08lx\n"
IDS_DETAIL_INFO_DISK_ID "Disk ID: %s\n"
IDS_DETAIL_INFO_TYPE "Tür"
IDS_DETAIL_INFO_STATUS "Durum"
IDS_DETAIL_INFO_PATH "Yol : %hu\n"
@@ -175,7 +185,10 @@ BEGIN
IDS_HELP_BREAK "Bir yansıma yığını ayır.\n"
IDS_HELP_CLEAN "Diskin yapılandırma bilgisini ya da tüm bilgisini sil.\n"
IDS_HELP_COMPACT "Dosyanın fiziki boyutunu düşürmeye çalışır.\n"
IDS_HELP_CONVERT "Farklı disk biçimleri arasında dönüştür.\n"
IDS_HELP_CONVERT_GPT "Converts an MBR disk to the GPT format.\n"
IDS_HELP_CONVERT_MBR "Converts a GPT disk to the MBR format.\n"
IDS_HELP_CREATE "Bir birim, bölüm ya da sanal disk oluştur.\n"
IDS_HELP_CREATE_PARTITION "Bir bölüm oluşturun.\n"

View File

@@ -38,6 +38,16 @@ BEGIN
IDS_CLEAN_SYSTEM "\nThe selected disk is neccessary to the operation of your computer, and may not be cleaned.\n"
END
STRINGTABLE
BEGIN
IDS_CONVERT_GPT_ALREADY "\nThe selected Disk can not be converted because it has already been GPT formatted.\n"
IDS_CONVERT_GPT_NOT_EMPTY "\nThe selected Disk can not be converted to the GPT format.\nSelect an empty MBR Disk for conversion.\n"
IDS_CONVERT_GPT_SUCCESS "\nThe selected Disk was successfully converted to the GPT format.\n"
IDS_CONVERT_MBR_ALREADY "\nThe selected Disk can not be converted because it has already been MBR formatted.\n"
IDS_CONVERT_MBR_NOT_EMPTY "\nThe selected Disk can not be converted to the MBR format.\nSelect an empty GPT Disk for conversion.\n"
IDS_CONVERT_MBR_SUCCESS "\nThe selected Disk was successfully converted to the MBR format.\n"
END
STRINGTABLE
BEGIN
IDS_CREATE_PARTITION_FAIL "\nDiskPart was unable to create the specified partition.\n"
@@ -53,7 +63,7 @@ END
/* Disk Information Labels */
STRINGTABLE
BEGIN
IDS_DETAIL_INFO_DISK_ID "Disk ID: %08lx\n"
IDS_DETAIL_INFO_DISK_ID "Disk ID: %s\n"
IDS_DETAIL_INFO_TYPE "类型"
IDS_DETAIL_INFO_STATUS "状态"
IDS_DETAIL_INFO_PATH "Path : %hu\n"
@@ -174,7 +184,10 @@ BEGIN
IDS_HELP_BREAK "中断镜像集。\n"
IDS_HELP_CLEAN "清除配置信息或所有信息,关闭\n 磁盘。\n"
IDS_HELP_COMPACT "尝试减少文件的物理大小。\n"
IDS_HELP_CONVERT "在不同的磁盘格式之间进行转换。\n"
IDS_HELP_CONVERT_GPT "Converts an MBR disk to the GPT format.\n"
IDS_HELP_CONVERT_MBR "Converts a GPT disk to the MBR format.\n"
IDS_HELP_CREATE "创建卷、分区或虚拟磁盘。\n"
IDS_HELP_CREATE_PARTITION "Create a partition.\n"

View File

@@ -38,6 +38,16 @@ BEGIN
IDS_CLEAN_SYSTEM "\n已選擇的磁碟是您的電腦操作所必要的所以無法清理。\n"
END
STRINGTABLE
BEGIN
IDS_CONVERT_GPT_ALREADY "\nThe selected Disk can not be converted because it has already been GPT formatted.\n"
IDS_CONVERT_GPT_NOT_EMPTY "\nThe selected Disk can not be converted to the GPT format.\nSelect an empty MBR Disk for conversion.\n"
IDS_CONVERT_GPT_SUCCESS "\nThe selected Disk was successfully converted to the GPT format.\n"
IDS_CONVERT_MBR_ALREADY "\nThe selected Disk can not be converted because it has already been MBR formatted.\n"
IDS_CONVERT_MBR_NOT_EMPTY "\nThe selected Disk can not be converted to the MBR format.\nSelect an empty GPT Disk for conversion.\n"
IDS_CONVERT_MBR_SUCCESS "\nThe selected Disk was successfully converted to the MBR format.\n"
END
STRINGTABLE
BEGIN
IDS_CREATE_PARTITION_FAIL "\nDiskPart 無法建立指定的磁碟分割。\n"
@@ -53,7 +63,7 @@ END
/* Disk Information Labels */
STRINGTABLE
BEGIN
IDS_DETAIL_INFO_DISK_ID "磁碟識別碼: %08lx\n"
IDS_DETAIL_INFO_DISK_ID "磁碟識別碼: %s\n"
IDS_DETAIL_INFO_TYPE "類型"
IDS_DETAIL_INFO_STATUS "狀態"
IDS_DETAIL_INFO_PATH "路徑 : %hu\n"
@@ -174,7 +184,10 @@ BEGIN
IDS_HELP_BREAK "中斷一個鏡像組。\n"
IDS_HELP_CLEAN "清除磁碟上的設定資訊或所有資訊。\n"
IDS_HELP_COMPACT "嘗試減少檔案的物理大小。\n"
IDS_HELP_CONVERT "轉換不同的磁碟格式。\n"
IDS_HELP_CONVERT_GPT "Converts an MBR disk to the GPT format.\n"
IDS_HELP_CONVERT_MBR "Converts a GPT disk to the MBR format.\n"
IDS_HELP_CREATE "建立一個磁碟區、磁碟分割或虛擬磁碟。\n"
IDS_HELP_CREATE_PARTITION "建立一個磁碟分割。\n"

View File

@@ -146,3 +146,59 @@ DuplicateString(
return pszOutString;
}
VOID
CreateGUID(
_Out_ GUID *pGuid)
{
RtlGenRandom(pGuid, sizeof(*pGuid));
/* Clear the version bits and set the version (4) */
pGuid->Data3 &= 0x0fff;
pGuid->Data3 |= (4 << 12);
/* Set the topmost bits of Data4 (clock_seq_hi_and_reserved) as
* specified in RFC 4122, section 4.4.
*/
pGuid->Data4[0] &= 0x3f;
pGuid->Data4[0] |= 0x80;
}
VOID
CreateSignature(
_Out_ PDWORD pSignature)
{
LARGE_INTEGER SystemTime;
TIME_FIELDS TimeFields;
PUCHAR Buffer;
NtQuerySystemTime(&SystemTime);
RtlTimeToTimeFields(&SystemTime, &TimeFields);
Buffer = (PUCHAR)pSignature;
Buffer[0] = (UCHAR)(TimeFields.Year & 0xFF) + (UCHAR)(TimeFields.Hour & 0xFF);
Buffer[1] = (UCHAR)(TimeFields.Year >> 8) + (UCHAR)(TimeFields.Minute & 0xFF);
Buffer[2] = (UCHAR)(TimeFields.Month & 0xFF) + (UCHAR)(TimeFields.Second & 0xFF);
Buffer[3] = (UCHAR)(TimeFields.Day & 0xFF) + (UCHAR)(TimeFields.Milliseconds & 0xFF);
}
VOID
PrintGUID(
_Out_ PWSTR pszBuffer,
_In_ GUID *pGuid)
{
swprintf(pszBuffer,
L"%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
pGuid->Data1,
pGuid->Data2,
pGuid->Data3,
pGuid->Data4[0],
pGuid->Data4[1],
pGuid->Data4[2],
pGuid->Data4[3],
pGuid->Data4[4],
pGuid->Data4[5],
pGuid->Data4[6],
pGuid->Data4[7]);
}

View File

@@ -80,6 +80,57 @@ PVOLENTRY CurrentVolume = NULL;
/* FUNCTIONS ******************************************************************/
#ifdef DUMP_PARTITION_TABLE
VOID
DumpPartitionTable(
_In_ PDISKENTRY DiskEntry)
{
PPARTITION_INFORMATION_EX PartitionInfo;
ULONG i;
DbgPrint("\n");
if (DiskEntry->LayoutBuffer->PartitionStyle == PARTITION_STYLE_MBR)
{
DbgPrint("Index Start Length Hidden Nr Type Boot RW\n");
DbgPrint("----- ------------ ------------ ---------- -- ---- ---- --\n");
for (i = 0; i < DiskEntry->LayoutBuffer->PartitionCount; i++)
{
PartitionInfo = &DiskEntry->LayoutBuffer->PartitionEntry[i];
DbgPrint(" %3lu %12I64u %12I64u %10lu %2lu %2x %c %c\n",
i,
PartitionInfo->StartingOffset.QuadPart / DiskEntry->BytesPerSector,
PartitionInfo->PartitionLength.QuadPart / DiskEntry->BytesPerSector,
PartitionInfo->Mbr.HiddenSectors,
PartitionInfo->PartitionNumber,
PartitionInfo->Mbr.PartitionType,
PartitionInfo->Mbr.BootIndicator ? '*': ' ',
PartitionInfo->RewritePartition ? 'Y': 'N');
}
}
else if (DiskEntry->LayoutBuffer->PartitionStyle == PARTITION_STYLE_GPT)
{
DbgPrint("Index Start Length Nr RW Type \n");
DbgPrint("----- ------------ ------------ -- -- --------\n");
for (i = 0; i < DiskEntry->LayoutBuffer->PartitionCount; i++)
{
PartitionInfo = &DiskEntry->LayoutBuffer->PartitionEntry[i];
DbgPrint(" %3lu %12I64u %12I64u %2lu %c %08lx\n",
i,
PartitionInfo->StartingOffset.QuadPart / DiskEntry->BytesPerSector,
PartitionInfo->PartitionLength.QuadPart / DiskEntry->BytesPerSector,
PartitionInfo->PartitionNumber,
PartitionInfo->RewritePartition ? 'Y': 'N',
PartitionInfo->Gpt.PartitionType.Data1);
}
}
DbgPrint("\n");
}
#endif
ULONGLONG
AlignDown(
_In_ ULONGLONG Value,
@@ -761,6 +812,66 @@ ScanForUnpartitionedDiskSpace(
}
VOID
ReadLayoutBuffer(
_In_ HANDLE FileHandle,
_In_ PDISKENTRY DiskEntry)
{
ULONG LayoutBufferSize;
PDRIVE_LAYOUT_INFORMATION_EX NewLayoutBuffer;
IO_STATUS_BLOCK Iosb;
NTSTATUS Status;
/* Allocate a layout buffer with 4 partition entries first */
LayoutBufferSize = sizeof(DRIVE_LAYOUT_INFORMATION_EX) +
((4 - ANYSIZE_ARRAY) * sizeof(PARTITION_INFORMATION_EX));
DiskEntry->LayoutBuffer = RtlAllocateHeap(RtlGetProcessHeap(),
HEAP_ZERO_MEMORY,
LayoutBufferSize);
if (DiskEntry->LayoutBuffer == NULL)
{
DPRINT1("Failed to allocate the disk layout buffer!\n");
return;
}
for (;;)
{
DPRINT1("Buffer size: %lu\n", LayoutBufferSize);
Status = NtDeviceIoControlFile(FileHandle,
NULL,
NULL,
NULL,
&Iosb,
IOCTL_DISK_GET_DRIVE_LAYOUT_EX,
NULL,
0,
DiskEntry->LayoutBuffer,
LayoutBufferSize);
if (NT_SUCCESS(Status))
break;
if (Status != STATUS_BUFFER_TOO_SMALL)
{
DPRINT1("NtDeviceIoControlFile() failed (Status: 0x%08lx)\n", Status);
return;
}
LayoutBufferSize += 4 * sizeof(PARTITION_INFORMATION_EX);
NewLayoutBuffer = RtlReAllocateHeap(RtlGetProcessHeap(),
HEAP_ZERO_MEMORY,
DiskEntry->LayoutBuffer,
LayoutBufferSize);
if (NewLayoutBuffer == NULL)
{
DPRINT1("Failed to reallocate the disk layout buffer!\n");
return;
}
DiskEntry->LayoutBuffer = NewLayoutBuffer;
}
}
static
VOID
AddDiskToList(
@@ -781,8 +892,6 @@ AddDiskToList(
ULONG i;
PLIST_ENTRY ListEntry;
PBIOSDISKENTRY BiosDiskEntry;
ULONG LayoutBufferSize;
PDRIVE_LAYOUT_INFORMATION_EX NewLayoutBuffer;
Status = NtDeviceIoControlFile(FileHandle,
NULL,
@@ -967,53 +1076,7 @@ AddDiskToList(
InsertAscendingList(&DiskListHead, DiskEntry, DISKENTRY, ListEntry, DiskNumber);
/* Allocate a layout buffer with 4 partition entries first */
LayoutBufferSize = sizeof(DRIVE_LAYOUT_INFORMATION_EX) +
((4 - ANYSIZE_ARRAY) * sizeof(PARTITION_INFORMATION_EX));
DiskEntry->LayoutBuffer = RtlAllocateHeap(RtlGetProcessHeap(),
HEAP_ZERO_MEMORY,
LayoutBufferSize);
if (DiskEntry->LayoutBuffer == NULL)
{
DPRINT1("Failed to allocate the disk layout buffer!\n");
return;
}
for (;;)
{
DPRINT1("Buffer size: %lu\n", LayoutBufferSize);
Status = NtDeviceIoControlFile(FileHandle,
NULL,
NULL,
NULL,
&Iosb,
IOCTL_DISK_GET_DRIVE_LAYOUT_EX,
NULL,
0,
DiskEntry->LayoutBuffer,
LayoutBufferSize);
if (NT_SUCCESS(Status))
break;
if (Status != STATUS_BUFFER_TOO_SMALL)
{
DPRINT1("NtDeviceIoControlFile() failed (Status: 0x%08lx)\n", Status);
return;
}
LayoutBufferSize += 4 * sizeof(PARTITION_INFORMATION_EX);
NewLayoutBuffer = RtlReAllocateHeap(RtlGetProcessHeap(),
HEAP_ZERO_MEMORY,
DiskEntry->LayoutBuffer,
LayoutBufferSize);
if (NewLayoutBuffer == NULL)
{
DPRINT1("Failed to reallocate the disk layout buffer!\n");
return;
}
DiskEntry->LayoutBuffer = NewLayoutBuffer;
}
ReadLayoutBuffer(FileHandle, DiskEntry);
DPRINT1("PartitionCount: %lu\n", DiskEntry->LayoutBuffer->PartitionCount);
@@ -1977,6 +2040,7 @@ GetNextUnpartitionedEntry(
return NULL;
}
NTSTATUS
DismountVolume(
_In_ PPARTENTRY PartEntry)

View File

@@ -26,6 +26,13 @@
#define IDS_CLEAN_SUCCESS 1021
#define IDS_CLEAN_SYSTEM 1022
#define IDS_CONVERT_GPT_ALREADY 1040
#define IDS_CONVERT_GPT_NOT_EMPTY 1041
#define IDS_CONVERT_GPT_SUCCESS 1042
#define IDS_CONVERT_MBR_ALREADY 1043
#define IDS_CONVERT_MBR_NOT_EMPTY 1044
#define IDS_CONVERT_MBR_SUCCESS 1045
#define IDS_CREATE_PARTITION_FAIL 1050
#define IDS_CREATE_PARTITION_SUCCESS 1051
@@ -121,68 +128,71 @@
#define IDS_HELP_BREAK 64
#define IDS_HELP_CLEAN 65
#define IDS_HELP_COMPACT 66
#define IDS_HELP_CONVERT 67
#define IDS_HELP_CONVERT_GPT 68
#define IDS_HELP_CONVERT_MBR 69
#define IDS_HELP_CREATE 68
#define IDS_HELP_CREATE_PARTITION 69
#define IDS_HELP_CREATE_PARTITION_EFI 70
#define IDS_HELP_CREATE_PARTITION_EXTENDED 71
#define IDS_HELP_CREATE_PARTITION_LOGICAL 72
#define IDS_HELP_CREATE_PARTITION_MSR 73
#define IDS_HELP_CREATE_PARTITION_PRIMARY 74
#define IDS_HELP_CREATE_VOLUME 75
#define IDS_HELP_CREATE_VDISK 76
#define IDS_HELP_CREATE 70
#define IDS_HELP_CREATE_PARTITION 71
#define IDS_HELP_CREATE_PARTITION_EFI 72
#define IDS_HELP_CREATE_PARTITION_EXTENDED 73
#define IDS_HELP_CREATE_PARTITION_LOGICAL 74
#define IDS_HELP_CREATE_PARTITION_MSR 75
#define IDS_HELP_CREATE_PARTITION_PRIMARY 76
#define IDS_HELP_CREATE_VOLUME 77
#define IDS_HELP_CREATE_VDISK 78
#define IDS_HELP_DELETE 77
#define IDS_HELP_DELETE_DISK 78
#define IDS_HELP_DELETE_PARTITION 79
#define IDS_HELP_DELETE_VOLUME 80
#define IDS_HELP_DELETE 79
#define IDS_HELP_DELETE_DISK 80
#define IDS_HELP_DELETE_PARTITION 81
#define IDS_HELP_DELETE_VOLUME 82
#define IDS_HELP_DETACH 81
#define IDS_HELP_DETACH 83
#define IDS_HELP_DETAIL 82
#define IDS_HELP_DETAIL_DISK 83
#define IDS_HELP_DETAIL_PARTITION 84
#define IDS_HELP_DETAIL_VOLUME 85
#define IDS_HELP_DETAIL 84
#define IDS_HELP_DETAIL_DISK 85
#define IDS_HELP_DETAIL_PARTITION 86
#define IDS_HELP_DETAIL_VOLUME 87
#define IDS_HELP_EXIT 86
#define IDS_HELP_EXPAND 87
#define IDS_HELP_EXTEND 88
#define IDS_HELP_FILESYSTEMS 89
#define IDS_HELP_FORMAT 90
#define IDS_HELP_GPT 91
#define IDS_HELP_HELP 92
#define IDS_HELP_IMPORT 93
#define IDS_HELP_INACTIVE 94
#define IDS_HELP_EXIT 88
#define IDS_HELP_EXPAND 89
#define IDS_HELP_EXTEND 90
#define IDS_HELP_FILESYSTEMS 91
#define IDS_HELP_FORMAT 92
#define IDS_HELP_GPT 93
#define IDS_HELP_HELP 94
#define IDS_HELP_IMPORT 95
#define IDS_HELP_INACTIVE 96
#define IDS_HELP_LIST 95
#define IDS_HELP_LIST_DISK 96
#define IDS_HELP_LIST_PARTITION 97
#define IDS_HELP_LIST_VOLUME 98
#define IDS_HELP_LIST_VDISK 99
#define IDS_HELP_LIST 97
#define IDS_HELP_LIST_DISK 98
#define IDS_HELP_LIST_PARTITION 99
#define IDS_HELP_LIST_VOLUME 100
#define IDS_HELP_LIST_VDISK 101
#define IDS_HELP_MERGE 100
#define IDS_HELP_ONLINE 101
#define IDS_HELP_OFFLINE 102
#define IDS_HELP_RECOVER 103
#define IDS_HELP_REM 104
#define IDS_HELP_REMOVE 105
#define IDS_HELP_REPAIR 106
#define IDS_HELP_RESCAN 107
#define IDS_HELP_RETAIN 108
#define IDS_HELP_SAN 109
#define IDS_HELP_MERGE 102
#define IDS_HELP_ONLINE 103
#define IDS_HELP_OFFLINE 104
#define IDS_HELP_RECOVER 105
#define IDS_HELP_REM 106
#define IDS_HELP_REMOVE 107
#define IDS_HELP_REPAIR 108
#define IDS_HELP_RESCAN 109
#define IDS_HELP_RETAIN 110
#define IDS_HELP_SAN 111
#define IDS_HELP_SELECT 110
#define IDS_HELP_SELECT_DISK 111
#define IDS_HELP_SELECT_PARTITION 112
#define IDS_HELP_SELECT_VOLUME 113
#define IDS_HELP_SELECT_VDISK 114
#define IDS_HELP_SELECT 112
#define IDS_HELP_SELECT_DISK 113
#define IDS_HELP_SELECT_PARTITION 114
#define IDS_HELP_SELECT_VOLUME 115
#define IDS_HELP_SELECT_VDISK 116
#define IDS_HELP_SETID 115
#define IDS_HELP_SHRINK 116
#define IDS_HELP_SETID 117
#define IDS_HELP_SHRINK 118
#define IDS_HELP_UNIQUEID 117
#define IDS_HELP_UNIQUEID_DISK 118
#define IDS_HELP_UNIQUEID 119
#define IDS_HELP_UNIQUEID_DISK 120
#define IDS_ERROR_MSG_NO_SCRIPT 2000
#define IDS_ERROR_MSG_BAD_ARG 2001

View File

@@ -18,6 +18,7 @@ UniqueIdDisk(
_In_ INT argc,
_In_ PWSTR *argv)
{
WCHAR szBuffer[40];
PWSTR pszSuffix = NULL;
ULONG ulValue;
@@ -30,7 +31,13 @@ UniqueIdDisk(
if (argc == 2)
{
ConPuts(StdOut, L"\n");
ConPrintf(StdOut, L"Disk ID: %08lx\n", CurrentDisk->LayoutBuffer->Mbr.Signature);
if (CurrentDisk->LayoutBuffer->PartitionStyle == PARTITION_STYLE_GPT)
PrintGUID(szBuffer, &CurrentDisk->LayoutBuffer->Gpt.DiskId);
else if (CurrentDisk->LayoutBuffer->PartitionStyle == PARTITION_STYLE_MBR)
swprintf(szBuffer, L"%08lx", CurrentDisk->LayoutBuffer->Mbr.Signature);
else
wcscpy(szBuffer, L"00000000");
ConPrintf(StdOut, L"Disk ID: %s\n", szBuffer);
ConPuts(StdOut, L"\n");
return TRUE;
}