Хочу получить информацию о дисках и разделах в windows.
Использовала функцию GetLogicalDrives()
, но оттуда я могу взять только именованные разделы. Как получить список всех физических дисков и их разделов, включая неименованные?
Например, на моей локальной машине 1 диск и 4 раздела: раздел 0, С:, D:, раздел 4.
С помощью функции GetLogicalDrives()
я получаю только C: и D:
#include <windows.h>
#include <stdio.h>
void DisplayVolumePaths(
__in PWCHAR VolumeName
)
{
DWORD CharCount = MAX_PATH + 1;
PWCHAR Names = NULL;
PWCHAR NameIdx = NULL;
BOOL Success = FALSE;
for (;;)
{
Names = (PWCHAR) new BYTE [CharCount * sizeof(WCHAR)];
if ( !Names )
{
return;
}
Success = GetVolumePathNamesForVolumeNameW(
VolumeName, Names, CharCount, &CharCount
);
if ( Success )
{
break;
}
if ( GetLastError() != ERROR_MORE_DATA )
{
break;
}
delete [] Names;
Names = NULL;
}
if ( Success )
{
for ( NameIdx = Names;
NameIdx[0] != L'\0';
NameIdx += wcslen(NameIdx) + 1 )
{
wprintf(L" %s", NameIdx);
}
wprintf(L"\n");
}
if ( Names != NULL )
{
delete [] Names;
Names = NULL;
}
return;
}
void __cdecl wmain(void)
{
DWORD CharCount = 0;
WCHAR DeviceName[MAX_PATH] = L"";
DWORD Error = ERROR_SUCCESS;
HANDLE FindHandle = INVALID_HANDLE_VALUE;
BOOL Found = FALSE;
size_t Index = 0;
BOOL Success = FALSE;
WCHAR VolumeName[MAX_PATH] = L"";
FindHandle = FindFirstVolumeW(VolumeName, ARRAYSIZE(VolumeName));
if (FindHandle == INVALID_HANDLE_VALUE)
{
Error = GetLastError();
wprintf(L"FindFirstVolumeW failed with error code %d\n", Error);
return;
}
for (;;)
{
Index = wcslen(VolumeName) - 1;
if (VolumeName[0] != L'\\' ||
VolumeName[1] != L'\\' ||
VolumeName[2] != L'?' ||
VolumeName[3] != L'\\' ||
VolumeName[Index] != L'\\')
{
Error = ERROR_BAD_PATHNAME;
wprintf(L"FindFirstVolumeW/FindNextVolumeW returned a bad path: %s\n", VolumeName);
break;
}
VolumeName[Index] = L'\0';
CharCount = QueryDosDeviceW(&VolumeName[4], DeviceName, ARRAYSIZE(DeviceName));
VolumeName[Index] = L'\\';
if ( CharCount == 0 )
{
Error = GetLastError();
wprintf(L"QueryDosDeviceW failed with error code %d\n", Error);
break;
}
wprintf(L"\nFound a device:\n %s", DeviceName);
wprintf(L"\nVolume name: %s", VolumeName);
wprintf(L"\nPaths:");
DisplayVolumePaths(VolumeName);
Success = FindNextVolumeW(FindHandle, VolumeName, ARRAYSIZE(VolumeName));
if ( !Success )
{
Error = GetLastError();
if (Error != ERROR_NO_MORE_FILES)
{
wprintf(L"FindNextVolumeW failed with error code %d\n", Error);
break;
}
Error = ERROR_SUCCESS;
break;
}
}
FindVolumeClose(FindHandle);
FindHandle = INVALID_HANDLE_VALUE;
return;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Когда я использую SVG, чтобы нарисовать цикл и поместить текст, то как центрировать текст на SVG Path?
Есть вариант с помощью order_by или filterНужно сортировать данные из базы данных точнее статьи
Встала проблема с выравниванием блоков как на картинкеПомогите пожалуйста с решением, какими способами это можно сделать? Сайт верстаю на Bootstrap4
Как сделать чтобы при нажатии на одну и ту же form дважды или больше, функция не работала? Но при нажатии на другие form (Не та что ранее) функция...