https://git.reactos.org/?p=reactos.git;a=commitdiff;h=38b38bbf0c74dadb3843d3...
commit 38b38bbf0c74dadb3843d30100ca7461b80cf801 Author: Eric Kohl eric.kohl@reactos.org AuthorDate: Mon Mar 28 00:25:34 2022 +0200 Commit: Eric Kohl eric.kohl@reactos.org CommitDate: Mon Mar 28 00:25:34 2022 +0200
[DISKPART] Implement the detail command
Display disk and partition details. --- base/system/diskpart/detail.c | 125 ++++++++++++++++++++++++++++++++++++- base/system/diskpart/lang/en-US.rc | 13 ++-- base/system/diskpart/lang/pl-PL.rc | 13 ++-- base/system/diskpart/lang/pt-PT.rc | 13 ++-- base/system/diskpart/lang/ro-RO.rc | 13 ++-- base/system/diskpart/lang/ru-RU.rc | 13 ++-- base/system/diskpart/lang/sq-AL.rc | 13 ++-- base/system/diskpart/lang/tr-TR.rc | 13 ++-- base/system/diskpart/lang/zh-CN.rc | 13 ++-- base/system/diskpart/lang/zh-TW.rc | 13 ++-- base/system/diskpart/resource.h | 7 +++ 11 files changed, 212 insertions(+), 37 deletions(-)
diff --git a/base/system/diskpart/detail.c b/base/system/diskpart/detail.c index 062c60216b4..464085149fc 100644 --- a/base/system/diskpart/detail.c +++ b/base/system/diskpart/detail.c @@ -8,7 +8,130 @@
#include "diskpart.h"
-BOOL detail_main(INT argc, LPWSTR *argv) +#define NDEBUG +#include <debug.h> + +/* FUNCTIONS ******************************************************************/ + +static +VOID +DetailDisk( + INT argc, + LPWSTR *argv) { + DPRINT("DetailDisk()\n"); + + if (argc > 2) + { + ConResPuts(StdErr, IDS_ERROR_INVALID_ARGS); + return; + } + + if (CurrentDisk == NULL) + { + ConResPuts(StdOut, IDS_SELECT_NO_DISK); + return; + } + + /* TODO: Print more disk details */ + ConPuts(StdOut, L"\n"); + ConResPrintf(StdOut, IDS_DETAIL_INFO_DISK_ID, CurrentDisk->LayoutBuffer->Signature); + 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); + ConPuts(StdOut, L"\n"); +} + + +static +VOID +DetailPartition( + INT argc, + LPWSTR *argv) +{ + PPARTENTRY PartEntry; + ULONGLONG PartOffset; + + DPRINT("DetailPartition()\n"); + + if (argc > 2) + { + ConResPuts(StdErr, IDS_ERROR_INVALID_ARGS); + return; + } + + if (CurrentDisk == NULL) + { + ConResPuts(StdOut, IDS_SELECT_PARTITION_NO_DISK); + return; + } + + if (CurrentPartition == NULL) + { + ConResPuts(StdOut, IDS_SELECT_NO_PARTITION); + return; + } + + PartEntry = CurrentPartition; + PartOffset = PartEntry->StartSector.QuadPart * CurrentDisk->BytesPerSector; + + /* TODO: Print more partition details */ + ConPuts(StdOut, L"\n"); + ConResPrintf(StdOut, IDS_DETAIL_PARTITION_NUMBER, PartEntry->PartitionNumber); + ConResPrintf(StdOut, IDS_DETAIL_PARTITION_TYPE, PartEntry->PartitionType); + ConResPrintf(StdOut, IDS_DETAIL_PARTITION_HIDDEN, ""); + ConResPrintf(StdOut, IDS_DETAIL_PARTITION_ACTIVE, PartEntry->BootIndicator ? L"Yes" : L"No"); + ConResPrintf(StdOut, IDS_DETAIL_PARTITION_OFFSET, PartOffset); + ConPuts(StdOut, L"\n"); +} + + +static +VOID +DetailVolume( + INT argc, + LPWSTR *argv) +{ + DPRINT("DetailVolume()\n"); + + if (argc > 2) + { + ConResPuts(StdErr, IDS_ERROR_INVALID_ARGS); + return; + } + + if (CurrentVolume == NULL) + { + ConResPuts(StdOut, IDS_SELECT_NO_VOLUME); + return; + } + + /* TODO: Print volume details */ + +} + + +BOOL +detail_main( + INT argc, + LPWSTR *argv) +{ + /* gets the first word from the string */ + if (argc == 1) + { + ConResPuts(StdOut, IDS_HELP_CMD_DETAIL); + return TRUE; + } + + /* determines which details to print (disk, partition, etc.) */ + if (!wcsicmp(argv[1], L"disk")) + DetailDisk(argc, argv); + else if (!wcsicmp(argv[1], L"partition")) + DetailPartition(argc, argv); + else if (!wcsicmp(argv[1], L"volume")) + DetailVolume(argc, argv); + else + ConResPuts(StdOut, IDS_HELP_CMD_DETAIL); + return TRUE; } diff --git a/base/system/diskpart/lang/en-US.rc b/base/system/diskpart/lang/en-US.rc index f23a5cc13e0..50a6c13fcdd 100644 --- a/base/system/diskpart/lang/en-US.rc +++ b/base/system/diskpart/lang/en-US.rc @@ -18,12 +18,12 @@ END /* Disk Information Labels */ STRINGTABLE BEGIN - IDS_DETAIL_INFO_DISK_ID "Disk" + IDS_DETAIL_INFO_DISK_ID "Disk ID: %08lx\n" IDS_DETAIL_INFO_TYPE "Type" IDS_DETAIL_INFO_STATUS "Status" - IDS_DETAIL_INFO_PATH "Path" - IDS_DETAIL_INFO_TARGET "Target" - IDS_DETAIL_INFO_LUN_ID "LUN ID" + IDS_DETAIL_INFO_PATH "Path : %hu\n" + IDS_DETAIL_INFO_TARGET "Target : %hu\n" + IDS_DETAIL_INFO_LUN_ID "Lun ID : %hu\n" IDS_DETAIL_INFO_LOC_PATH "Location Path" IDS_DETAIL_INFO_CURR_RO_STATE "Current Read-only State" IDS_DETAIL_INFO_RO "Read-only" @@ -32,6 +32,11 @@ BEGIN IDS_DETAIL_INFO_HIBER_FILE_DSK "Hibernation File Disk" IDS_DETAIL_INFO_CRASH_DSK "Crashdump Disk" IDS_DETAIL_INFO_CLST_DSK "Clustered Disk" + IDS_DETAIL_PARTITION_NUMBER "Partition %lu\n" + IDS_DETAIL_PARTITION_TYPE "Type : %02x\n" + IDS_DETAIL_PARTITION_HIDDEN "Hidden : %s\n" + IDS_DETAIL_PARTITION_ACTIVE "Active : %s\n" + IDS_DETAIL_PARTITION_OFFSET "Offset in Byte: %I64u\n" END
/* Detail header titles */ diff --git a/base/system/diskpart/lang/pl-PL.rc b/base/system/diskpart/lang/pl-PL.rc index 2656950d8b7..5d5efe940f4 100644 --- a/base/system/diskpart/lang/pl-PL.rc +++ b/base/system/diskpart/lang/pl-PL.rc @@ -18,12 +18,12 @@ END /* Disk Information Labels */ STRINGTABLE BEGIN - IDS_DETAIL_INFO_DISK_ID "Dysk" + IDS_DETAIL_INFO_DISK_ID "Dysk ID: %08lx\n" IDS_DETAIL_INFO_TYPE "Typ" IDS_DETAIL_INFO_STATUS "Stan" - IDS_DETAIL_INFO_PATH "Ścieżka" - IDS_DETAIL_INFO_TARGET "Docelowy" - IDS_DETAIL_INFO_LUN_ID "Identyfikator LUN" + IDS_DETAIL_INFO_PATH "Ścieżka : %hu\n" + IDS_DETAIL_INFO_TARGET "Docelowy : %hu\n" + IDS_DETAIL_INFO_LUN_ID "Identyfikator LUN : %hu\n" IDS_DETAIL_INFO_LOC_PATH "Ścieżka lokalizacji" IDS_DETAIL_INFO_CURR_RO_STATE "Aktualny stan Read-only" IDS_DETAIL_INFO_RO "Tylko do odczytu" @@ -32,6 +32,11 @@ BEGIN IDS_DETAIL_INFO_HIBER_FILE_DSK "Dysk pliku hibernacji" IDS_DETAIL_INFO_CRASH_DSK "Dysk zrzutu awarii systemu" IDS_DETAIL_INFO_CLST_DSK "Dysk klastrowany" + IDS_DETAIL_PARTITION_NUMBER "Partition %lu\n" + IDS_DETAIL_PARTITION_TYPE "Type : %02x\n" + IDS_DETAIL_PARTITION_HIDDEN "Hidden : %s\n" + IDS_DETAIL_PARTITION_ACTIVE "Active : %s\n" + IDS_DETAIL_PARTITION_OFFSET "Offset in Byte: %I64u\n" END
/* Detail header titles */ diff --git a/base/system/diskpart/lang/pt-PT.rc b/base/system/diskpart/lang/pt-PT.rc index f3321412c72..ddbeba2fc2f 100644 --- a/base/system/diskpart/lang/pt-PT.rc +++ b/base/system/diskpart/lang/pt-PT.rc @@ -20,12 +20,12 @@ END /* Disk Information Labels */ STRINGTABLE BEGIN - IDS_DETAIL_INFO_DISK_ID "Disco" + IDS_DETAIL_INFO_DISK_ID "Disco ID: %08lx\n" IDS_DETAIL_INFO_TYPE "Tipo" IDS_DETAIL_INFO_STATUS "Estado" - IDS_DETAIL_INFO_PATH "Caminho" - IDS_DETAIL_INFO_TARGET "Alvo" - IDS_DETAIL_INFO_LUN_ID "LUN ID" + IDS_DETAIL_INFO_PATH "Caminho : %hu\n" + IDS_DETAIL_INFO_TARGET "Alvo : %hu\n" + IDS_DETAIL_INFO_LUN_ID "LUN ID : %hu\n" IDS_DETAIL_INFO_LOC_PATH "Caminho de localização" IDS_DETAIL_INFO_CURR_RO_STATE "Estado actual somente de leitura" IDS_DETAIL_INFO_RO "Apenas leitura" @@ -34,6 +34,11 @@ BEGIN IDS_DETAIL_INFO_HIBER_FILE_DSK "Ficheiro de hibernação de disco" IDS_DETAIL_INFO_CRASH_DSK "Despejo de memória de disco" IDS_DETAIL_INFO_CLST_DSK "Disco em cluster" + IDS_DETAIL_PARTITION_NUMBER "Partition %lu\n" + IDS_DETAIL_PARTITION_TYPE "Type : %02x\n" + IDS_DETAIL_PARTITION_HIDDEN "Hidden : %s\n" + IDS_DETAIL_PARTITION_ACTIVE "Active : %s\n" + IDS_DETAIL_PARTITION_OFFSET "Offset in Byte: %I64u\n" END
/* Detail header titles */ diff --git a/base/system/diskpart/lang/ro-RO.rc b/base/system/diskpart/lang/ro-RO.rc index 99c311a7800..6e82e7c8b9e 100644 --- a/base/system/diskpart/lang/ro-RO.rc +++ b/base/system/diskpart/lang/ro-RO.rc @@ -20,12 +20,12 @@ END /* Disk Information Labels */ STRINGTABLE BEGIN - IDS_DETAIL_INFO_DISK_ID "Disc" + IDS_DETAIL_INFO_DISK_ID "Disc ID: %08lx\n" IDS_DETAIL_INFO_TYPE "Tip" IDS_DETAIL_INFO_STATUS "Stare" - IDS_DETAIL_INFO_PATH "Cale" - IDS_DETAIL_INFO_TARGET "Țintă" - IDS_DETAIL_INFO_LUN_ID "LUN ID" + IDS_DETAIL_INFO_PATH "Cale : %hu\n" + IDS_DETAIL_INFO_TARGET "Țintă : %hu\n" + IDS_DETAIL_INFO_LUN_ID "LUN ID : %hu\n" IDS_DETAIL_INFO_LOC_PATH "Localizat în" IDS_DETAIL_INFO_CURR_RO_STATE "Stare curentă nemodificabilă" IDS_DETAIL_INFO_RO "Nemodificabil" @@ -34,6 +34,11 @@ BEGIN IDS_DETAIL_INFO_HIBER_FILE_DSK "Disc cu fișier de hibernare" IDS_DETAIL_INFO_CRASH_DSK "Disc cu fișier «crashdump»" IDS_DETAIL_INFO_CLST_DSK "Disc în «cluster»" + IDS_DETAIL_PARTITION_NUMBER "Partition %lu\n" + IDS_DETAIL_PARTITION_TYPE "Type : %02x\n" + IDS_DETAIL_PARTITION_HIDDEN "Hidden : %s\n" + IDS_DETAIL_PARTITION_ACTIVE "Active : %s\n" + IDS_DETAIL_PARTITION_OFFSET "Offset in Byte: %I64u\n" END
/* Detail header titles */ diff --git a/base/system/diskpart/lang/ru-RU.rc b/base/system/diskpart/lang/ru-RU.rc index ad20e840a0c..6e9a8cb5b48 100644 --- a/base/system/diskpart/lang/ru-RU.rc +++ b/base/system/diskpart/lang/ru-RU.rc @@ -20,12 +20,12 @@ END /* Disk Information Labels */ STRINGTABLE BEGIN - IDS_DETAIL_INFO_DISK_ID "Диск" + IDS_DETAIL_INFO_DISK_ID "Disk ID: %08lx\n" IDS_DETAIL_INFO_TYPE "Тип" IDS_DETAIL_INFO_STATUS "Состояние" - IDS_DETAIL_INFO_PATH "Путь" - IDS_DETAIL_INFO_TARGET "Цель" - IDS_DETAIL_INFO_LUN_ID "LUN ID" + IDS_DETAIL_INFO_PATH "Path : %hu\n" + IDS_DETAIL_INFO_TARGET "Target : %hu\n" + IDS_DETAIL_INFO_LUN_ID "Lun ID : %hu\n" IDS_DETAIL_INFO_LOC_PATH "Путь к диску" IDS_DETAIL_INFO_CURR_RO_STATE "Текущее состояние ""Только для чтения""" IDS_DETAIL_INFO_RO "Только для чтения" @@ -34,6 +34,11 @@ BEGIN IDS_DETAIL_INFO_HIBER_FILE_DSK "Hibernation File диск" IDS_DETAIL_INFO_CRASH_DSK "Crashdump диск" IDS_DETAIL_INFO_CLST_DSK "Кластерный диск" + IDS_DETAIL_PARTITION_NUMBER "Partition %lu\n" + IDS_DETAIL_PARTITION_TYPE "Type : %02x\n" + IDS_DETAIL_PARTITION_HIDDEN "Hidden : %s\n" + IDS_DETAIL_PARTITION_ACTIVE "Active : %s\n" + IDS_DETAIL_PARTITION_OFFSET "Offset in Byte: %I64u\n" END
/* Detail header titles */ diff --git a/base/system/diskpart/lang/sq-AL.rc b/base/system/diskpart/lang/sq-AL.rc index 2238218d669..3f1222bcb8a 100644 --- a/base/system/diskpart/lang/sq-AL.rc +++ b/base/system/diskpart/lang/sq-AL.rc @@ -22,12 +22,12 @@ END /* Disk Information Labels */ STRINGTABLE BEGIN - IDS_DETAIL_INFO_DISK_ID "Disk" + IDS_DETAIL_INFO_DISK_ID "Disk ID: %08lx\n" IDS_DETAIL_INFO_TYPE "Tipi" IDS_DETAIL_INFO_STATUS "Gjendja" - IDS_DETAIL_INFO_PATH "Rrugë" - IDS_DETAIL_INFO_TARGET "Objektivi" - IDS_DETAIL_INFO_LUN_ID "LUN ID" + IDS_DETAIL_INFO_PATH "Path : %hu\n" + IDS_DETAIL_INFO_TARGET "Target : %hu\n" + IDS_DETAIL_INFO_LUN_ID "Lun ID : %hu\n" IDS_DETAIL_INFO_LOC_PATH "Rruga e vendndodhjes" IDS_DETAIL_INFO_CURR_RO_STATE "Read-only Gjendja aktuale" IDS_DETAIL_INFO_RO "Read-only" @@ -36,6 +36,11 @@ BEGIN IDS_DETAIL_INFO_HIBER_FILE_DSK "Hibernimi i dokumeteve Disk" IDS_DETAIL_INFO_CRASH_DSK "Hedhja e te dhenave Disk" IDS_DETAIL_INFO_CLST_DSK "Grupimet ne Disk" + IDS_DETAIL_PARTITION_NUMBER "Partition %lu\n" + IDS_DETAIL_PARTITION_TYPE "Type : %02x\n" + IDS_DETAIL_PARTITION_HIDDEN "Hidden : %s\n" + IDS_DETAIL_PARTITION_ACTIVE "Active : %s\n" + IDS_DETAIL_PARTITION_OFFSET "Offset in Byte: %I64u\n" END
/* Detail header titles */ diff --git a/base/system/diskpart/lang/tr-TR.rc b/base/system/diskpart/lang/tr-TR.rc index 193502965c6..bb77084dd56 100644 --- a/base/system/diskpart/lang/tr-TR.rc +++ b/base/system/diskpart/lang/tr-TR.rc @@ -20,12 +20,12 @@ END /* Disk Information Labels */ STRINGTABLE BEGIN - IDS_DETAIL_INFO_DISK_ID "Disk" + IDS_DETAIL_INFO_DISK_ID "Disk ID: %08lx\n" IDS_DETAIL_INFO_TYPE "Tür" IDS_DETAIL_INFO_STATUS "Durum" - IDS_DETAIL_INFO_PATH "Yol" - IDS_DETAIL_INFO_TARGET "Varış" - IDS_DETAIL_INFO_LUN_ID "LUN ID" + IDS_DETAIL_INFO_PATH "Path : %hu\n" + IDS_DETAIL_INFO_TARGET "Target : %hu\n" + IDS_DETAIL_INFO_LUN_ID "Lun ID : %hu\n" IDS_DETAIL_INFO_LOC_PATH "Konum Yolu" IDS_DETAIL_INFO_CURR_RO_STATE "Şimdiki Yalnızca Okunur Durumu" IDS_DETAIL_INFO_RO "Yalnızca Okunur" @@ -34,6 +34,11 @@ BEGIN IDS_DETAIL_INFO_HIBER_FILE_DSK "Hazırda Bekletme Dosyası Diski" IDS_DETAIL_INFO_CRASH_DSK "Çöküş Dökümü Diski" IDS_DETAIL_INFO_CLST_DSK "Kümelenmiş Disk" + IDS_DETAIL_PARTITION_NUMBER "Partition %lu\n" + IDS_DETAIL_PARTITION_TYPE "Type : %02x\n" + IDS_DETAIL_PARTITION_HIDDEN "Hidden : %s\n" + IDS_DETAIL_PARTITION_ACTIVE "Active : %s\n" + IDS_DETAIL_PARTITION_OFFSET "Offset in Byte: %I64u\n" END
/* Detail header titles */ diff --git a/base/system/diskpart/lang/zh-CN.rc b/base/system/diskpart/lang/zh-CN.rc index e04d919004c..06ee3182e2f 100644 --- a/base/system/diskpart/lang/zh-CN.rc +++ b/base/system/diskpart/lang/zh-CN.rc @@ -21,12 +21,12 @@ END /* Disk Information Labels */ STRINGTABLE BEGIN - IDS_DETAIL_INFO_DISK_ID "磁盘" + IDS_DETAIL_INFO_DISK_ID "Disk ID: %08lx\n" IDS_DETAIL_INFO_TYPE "类型" IDS_DETAIL_INFO_STATUS "状态" - IDS_DETAIL_INFO_PATH "路径" - IDS_DETAIL_INFO_TARGET "目标" - IDS_DETAIL_INFO_LUN_ID "LUN ID" + IDS_DETAIL_INFO_PATH "Path : %hu\n" + IDS_DETAIL_INFO_TARGET "Target : %hu\n" + IDS_DETAIL_INFO_LUN_ID "Lun ID : %hu\n" IDS_DETAIL_INFO_LOC_PATH "位置路径" IDS_DETAIL_INFO_CURR_RO_STATE "当前的只读状态" IDS_DETAIL_INFO_RO "只读模式" @@ -35,6 +35,11 @@ BEGIN IDS_DETAIL_INFO_HIBER_FILE_DSK "休眠文件磁盘" IDS_DETAIL_INFO_CRASH_DSK "故障转储磁盘" IDS_DETAIL_INFO_CLST_DSK "群集的磁盘" + IDS_DETAIL_PARTITION_NUMBER "Partition %lu\n" + IDS_DETAIL_PARTITION_TYPE "Type : %02x\n" + IDS_DETAIL_PARTITION_HIDDEN "Hidden : %s\n" + IDS_DETAIL_PARTITION_ACTIVE "Active : %s\n" + IDS_DETAIL_PARTITION_OFFSET "Offset in Byte: %I64u\n" END
/* Detail header titles */ diff --git a/base/system/diskpart/lang/zh-TW.rc b/base/system/diskpart/lang/zh-TW.rc index 15a26899024..1674d6585fb 100644 --- a/base/system/diskpart/lang/zh-TW.rc +++ b/base/system/diskpart/lang/zh-TW.rc @@ -21,12 +21,12 @@ END /* Disk Information Labels */ STRINGTABLE BEGIN - IDS_DETAIL_INFO_DISK_ID "磁碟" + IDS_DETAIL_INFO_DISK_ID "Disk ID: %08lx\n" IDS_DETAIL_INFO_TYPE "類型" IDS_DETAIL_INFO_STATUS "狀態" - IDS_DETAIL_INFO_PATH "路徑" - IDS_DETAIL_INFO_TARGET "目標" - IDS_DETAIL_INFO_LUN_ID "LUN ID" + IDS_DETAIL_INFO_PATH "Path : %hu\n" + IDS_DETAIL_INFO_TARGET "Target : %hu\n" + IDS_DETAIL_INFO_LUN_ID "Lun ID : %hu\n" IDS_DETAIL_INFO_LOC_PATH "位置路徑" IDS_DETAIL_INFO_CURR_RO_STATE "當前的唯讀狀態" IDS_DETAIL_INFO_RO "唯讀模式" @@ -35,6 +35,11 @@ BEGIN IDS_DETAIL_INFO_HIBER_FILE_DSK "休眠檔案磁碟" IDS_DETAIL_INFO_CRASH_DSK "損毀傾印磁碟" IDS_DETAIL_INFO_CLST_DSK "叢集磁碟" + IDS_DETAIL_PARTITION_NUMBER "Partition %lu\n" + IDS_DETAIL_PARTITION_TYPE "Type : %02x\n" + IDS_DETAIL_PARTITION_HIDDEN "Hidden : %s\n" + IDS_DETAIL_PARTITION_ACTIVE "Active : %s\n" + IDS_DETAIL_PARTITION_OFFSET "Offset in Byte: %I64u\n" END
/* Detail header titles */ diff --git a/base/system/diskpart/resource.h b/base/system/diskpart/resource.h index 34924947a98..ab5989de4d3 100644 --- a/base/system/diskpart/resource.h +++ b/base/system/diskpart/resource.h @@ -32,6 +32,12 @@ #define IDS_DETAIL_INFO_CRASH_DSK 19 #define IDS_DETAIL_INFO_CLST_DSK 20
+#define IDS_DETAIL_PARTITION_NUMBER 30 +#define IDS_DETAIL_PARTITION_TYPE 31 +#define IDS_DETAIL_PARTITION_HIDDEN 32 +#define IDS_DETAIL_PARTITION_ACTIVE 33 +#define IDS_DETAIL_PARTITION_OFFSET 34 + #define IDS_LIST_DISK_HEAD 3300 #define IDS_LIST_DISK_LINE 3301 #define IDS_LIST_DISK_FORMAT 3302 @@ -121,6 +127,7 @@ #define IDS_HELP_CMD_COMPACT 113 #define IDS_HELP_CMD_CONVERT 114 #define IDS_HELP_CMD_CREATE 115 +#define IDS_HELP_CMD_CREATE_PARTITION 180 #define IDS_HELP_CMD_DELETE 116 #define IDS_HELP_CMD_DETACH 117 #define IDS_HELP_CMD_DETAIL 118