mirror of
https://github.com/reactos/reactos.git
synced 2026-05-31 16:31:07 +08:00
[DISKPART] Identify system and boot volumes
This commit is contained in:
@@ -250,6 +250,9 @@ typedef struct _VOLENTRY
|
||||
ULONG SectorsPerAllocationUnit;
|
||||
ULONG BytesPerSector;
|
||||
|
||||
BOOL IsSystem;
|
||||
BOOL IsBoot;
|
||||
|
||||
PVOLUME_DISK_EXTENTS pExtents;
|
||||
|
||||
} VOLENTRY, *PVOLENTRY;
|
||||
|
||||
@@ -210,6 +210,8 @@ BEGIN
|
||||
IDS_STATUS_ONLINE "Online"
|
||||
IDS_STATUS_OFFLINE "Offline"
|
||||
IDS_STATUS_NO_MEDIA "No Media"
|
||||
IDS_INFO_BOOT "Start"
|
||||
IDS_INFO_SYSTEM "System"
|
||||
END
|
||||
|
||||
/* CMD Messages for commands */
|
||||
|
||||
@@ -210,6 +210,8 @@ BEGIN
|
||||
IDS_STATUS_ONLINE "Online"
|
||||
IDS_STATUS_OFFLINE "Offline"
|
||||
IDS_STATUS_NO_MEDIA "No Media"
|
||||
IDS_INFO_BOOT "Boot"
|
||||
IDS_INFO_SYSTEM "System"
|
||||
END
|
||||
|
||||
/* CMD Messages for commands */
|
||||
|
||||
@@ -217,6 +217,8 @@ BEGIN
|
||||
IDS_STATUS_ONLINE "Online"
|
||||
IDS_STATUS_OFFLINE "Offline"
|
||||
IDS_STATUS_NO_MEDIA "Nessun Media"
|
||||
IDS_INFO_BOOT "Boot"
|
||||
IDS_INFO_SYSTEM "System"
|
||||
END
|
||||
|
||||
/* CMD Messages for commands */
|
||||
|
||||
@@ -210,6 +210,8 @@ BEGIN
|
||||
IDS_STATUS_ONLINE "Online"
|
||||
IDS_STATUS_OFFLINE "Offline"
|
||||
IDS_STATUS_NO_MEDIA "Brak nośnika"
|
||||
IDS_INFO_BOOT "Boot"
|
||||
IDS_INFO_SYSTEM "System"
|
||||
END
|
||||
|
||||
/* CMD Messages for commands */
|
||||
|
||||
@@ -212,6 +212,8 @@ BEGIN
|
||||
IDS_STATUS_ONLINE "Activo"
|
||||
IDS_STATUS_OFFLINE "Inactivo"
|
||||
IDS_STATUS_NO_MEDIA "sem disco"
|
||||
IDS_INFO_BOOT "Boot"
|
||||
IDS_INFO_SYSTEM "System"
|
||||
END
|
||||
|
||||
/* CMD Messages for commands */
|
||||
|
||||
@@ -218,6 +218,8 @@ BEGIN
|
||||
IDS_STATUS_ONLINE "conectat"
|
||||
IDS_STATUS_OFFLINE "neconectat"
|
||||
IDS_STATUS_NO_MEDIA "inexistent"
|
||||
IDS_INFO_BOOT "Boot"
|
||||
IDS_INFO_SYSTEM "System"
|
||||
END
|
||||
|
||||
/* CMD Messages for commands */
|
||||
|
||||
@@ -212,6 +212,8 @@ BEGIN
|
||||
IDS_STATUS_ONLINE "В сети"
|
||||
IDS_STATUS_OFFLINE "Вне сети"
|
||||
IDS_STATUS_NO_MEDIA "Нет носителя"
|
||||
IDS_INFO_BOOT "Boot"
|
||||
IDS_INFO_SYSTEM "System"
|
||||
END
|
||||
|
||||
/* CMD Messages for commands */
|
||||
|
||||
@@ -214,6 +214,8 @@ BEGIN
|
||||
IDS_STATUS_ONLINE "Online"
|
||||
IDS_STATUS_OFFLINE "Offline"
|
||||
IDS_STATUS_NO_MEDIA "Ska Media"
|
||||
IDS_INFO_BOOT "Boot"
|
||||
IDS_INFO_SYSTEM "System"
|
||||
END
|
||||
|
||||
/* CMD Messages for commands */
|
||||
|
||||
@@ -220,6 +220,8 @@ BEGIN
|
||||
IDS_STATUS_ONLINE "Çevrim İçi"
|
||||
IDS_STATUS_OFFLINE "Çevrim Dışı"
|
||||
IDS_STATUS_NO_MEDIA "Ortam Yok"
|
||||
IDS_INFO_BOOT "Boot"
|
||||
IDS_INFO_SYSTEM "System"
|
||||
END
|
||||
|
||||
/* CMD Messages for commands */
|
||||
|
||||
@@ -219,6 +219,8 @@ BEGIN
|
||||
IDS_STATUS_ONLINE "联机"
|
||||
IDS_STATUS_OFFLINE "脱机"
|
||||
IDS_STATUS_NO_MEDIA "没有媒体"
|
||||
IDS_INFO_BOOT "Boot"
|
||||
IDS_INFO_SYSTEM "System"
|
||||
END
|
||||
|
||||
/* CMD Messages for commands */
|
||||
|
||||
@@ -219,6 +219,8 @@ BEGIN
|
||||
IDS_STATUS_ONLINE "在線"
|
||||
IDS_STATUS_OFFLINE "離線"
|
||||
IDS_STATUS_NO_MEDIA "沒有媒體"
|
||||
IDS_INFO_BOOT "Boot"
|
||||
IDS_INFO_SYSTEM "System"
|
||||
END
|
||||
|
||||
/* CMD Messages for commands */
|
||||
|
||||
@@ -474,6 +474,7 @@ PrintVolume(
|
||||
ULONGLONG VolumeSize;
|
||||
PWSTR pszSizeUnit;
|
||||
PWSTR pszVolumeType;
|
||||
WCHAR szInfoBuffer[16];
|
||||
|
||||
VolumeSize = VolumeEntry->Size.QuadPart;
|
||||
if (VolumeSize >= SIZE_10TB) /* 10 TB */
|
||||
@@ -514,6 +515,12 @@ PrintVolume(
|
||||
break;
|
||||
}
|
||||
|
||||
szInfoBuffer[0] = UNICODE_NULL;
|
||||
if (VolumeEntry->IsSystem)
|
||||
LoadStringW(GetModuleHandle(NULL), IDS_INFO_SYSTEM, szInfoBuffer, ARRAYSIZE(szInfoBuffer));
|
||||
else if (VolumeEntry->IsBoot)
|
||||
LoadStringW(GetModuleHandle(NULL), IDS_INFO_BOOT, szInfoBuffer, ARRAYSIZE(szInfoBuffer));
|
||||
|
||||
ConResPrintf(StdOut, IDS_LIST_VOLUME_FORMAT,
|
||||
(CurrentVolume == VolumeEntry) ? L'*' : L' ',
|
||||
VolumeEntry->VolumeNumber,
|
||||
@@ -522,7 +529,8 @@ PrintVolume(
|
||||
(VolumeEntry->pszFilesystem) ? VolumeEntry->pszFilesystem : L"",
|
||||
pszVolumeType,
|
||||
VolumeSize, pszSizeUnit,
|
||||
L"", L"");
|
||||
L"",
|
||||
szInfoBuffer);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1829,6 +1829,78 @@ GetVolumeSize(
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
VOID
|
||||
IsVolumeSystem(
|
||||
_In_ PVOLENTRY VolumeEntry)
|
||||
{
|
||||
WCHAR szSystemPartition[MAX_PATH];
|
||||
HKEY hKey;
|
||||
DWORD dwError, dwLength;
|
||||
|
||||
DPRINT1("IsVolumeSystem()\n");
|
||||
|
||||
VolumeEntry->IsSystem = FALSE;
|
||||
|
||||
dwError = RegOpenKeyExW(HKEY_LOCAL_MACHINE,
|
||||
L"SYSTEM\\Setup",
|
||||
0,
|
||||
KEY_READ,
|
||||
&hKey);
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
DPRINT1("\n");
|
||||
return;
|
||||
}
|
||||
|
||||
dwLength = sizeof(szSystemPartition);
|
||||
dwError = RegQueryValueExW(hKey,
|
||||
L"SystemPartition",
|
||||
NULL,
|
||||
NULL,
|
||||
(PBYTE)szSystemPartition,
|
||||
&dwLength);
|
||||
RegCloseKey(hKey);
|
||||
|
||||
if (dwError != ERROR_SUCCESS)
|
||||
{
|
||||
DPRINT1("\n");
|
||||
return;
|
||||
}
|
||||
|
||||
DPRINT1("SystemPartition: %S\n", szSystemPartition);
|
||||
DPRINT1("DeviceName: %S\n", VolumeEntry->DeviceName);
|
||||
|
||||
if (_wcsnicmp(szSystemPartition, VolumeEntry->DeviceName, wcslen(szSystemPartition)) == 0)
|
||||
VolumeEntry->IsSystem = TRUE;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
VOID
|
||||
IsVolumeBoot(
|
||||
_In_ PVOLENTRY VolumeEntry)
|
||||
{
|
||||
WCHAR szSystemDir[MAX_PATH];
|
||||
|
||||
DPRINT1("IsVolumeBoot()\n");
|
||||
|
||||
VolumeEntry->IsBoot = FALSE;
|
||||
|
||||
if (VolumeEntry->DriveLetter == UNICODE_NULL)
|
||||
return;
|
||||
|
||||
GetSystemDirectoryW(szSystemDir,
|
||||
ARRAYSIZE(szSystemDir));
|
||||
|
||||
DPRINT1("SystemDirectory: %S\n", szSystemDir);
|
||||
DPRINT1("DriveLetter: %C\n", VolumeEntry->DriveLetter);
|
||||
|
||||
if (szSystemDir[0] == VolumeEntry->DriveLetter)
|
||||
VolumeEntry->IsBoot = TRUE;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
VOID
|
||||
AddVolumeToList(
|
||||
@@ -1958,6 +2030,9 @@ AddVolumeToList(
|
||||
}
|
||||
}
|
||||
|
||||
IsVolumeSystem(VolumeEntry);
|
||||
IsVolumeBoot(VolumeEntry);
|
||||
|
||||
InsertTailList(&VolumeListHead,
|
||||
&VolumeEntry->ListEntry);
|
||||
}
|
||||
|
||||
@@ -146,6 +146,8 @@
|
||||
#define IDS_STATUS_ONLINE 36
|
||||
#define IDS_STATUS_OFFLINE 37
|
||||
#define IDS_STATUS_NO_MEDIA 38
|
||||
#define IDS_INFO_BOOT 39
|
||||
#define IDS_INFO_SYSTEM 40
|
||||
|
||||
#define IDS_MSG_ARG_SYNTAX_ERROR 41
|
||||
|
||||
|
||||
Reference in New Issue
Block a user