Próbuję uzyskać całkowity rozmiar dysku fizycznego (nieprzydzielone + partycje podstawowe + rozmiar rozszerzonych partycji).Uzyskaj całkowity rozmiar dysku twardego w systemie C++ Windows
mam nazwę dysku jako \\.\PhysicalDriveX
Próbowałem za pomocą GetDiskFreeSpaceEx
ale nie daje poprawny wynik, gdy partycja jest partycja rozszerzona, w tym przypadku zwraca całkowity rozmiar partycji.
BOOL ret = FALSE;
ULARGE_INTEGER ulFreeSpace;
ULARGE_INTEGER ulTotalSpace;
ULARGE_INTEGER ulTotalFreeSpace;
__int64 ulTotalUsedSpace = 0;
GetDiskFreeSpaceEx(szBuffer, &ulFreeSpace, &ulTotalSpace, &ulTotalFreeSpace);
*diskSize = ulTotalSpace.QuadPart;
mogę uzyskać informacje o partycji przy użyciu DeviceIoControl użyciu IOCTL_DISK_GET_DRIVE_LAYOUT_EX ale otrzymuję mylić o przedłużonym rozmiaru partycji.
Czy istnieje sposób, że mogę dokładnie uzyskać całkowity rozmiar dysku twardego w C++ w oknach?
Dzięki Rudi, teraz pracuje dla mnie jeszcze jedno pytanie skąd mam wiedzieć, który dysk jest dysk logiczny. Mam na myśli, czy powinienem przeczytać ebr, czy może to zrobić z DeviceIoControl? – singh
'DeviceIoControl' działa z dyskami bezpośrednio, a nie partycjami, jeśli chcesz uzyskać informacje o partycji, to jest kandydatem na inne pytanie SO :) –
IOCTL_DISK_GET_DRIVE_GEOMETRY jest niedokładnym sposobem na uzyskanie całkowitego rozmiaru w bajtach (kilka K mniej niż faktyczny rozmiar dysku). Sugeruję zamiast tego użycie IOCTL_DISK_GET_LENGTH_INFO. – Calmarius