Как монтировать раздел размонтированный ранее

Я демонтирую область такими функциями:

DeviceIoControl(hDisk, FSCTL_UNLOCK_VOLUME, NULL, 0, NULL, 0, &dwBytesWritten, NULL);

DeviceIoControl(hDisk, FSCTL_DISMOUNT_VOLUME, 0, 0, 0, 0, &dwBytesWritten, 0);

После завершение программы раздел монтируется сам, но мне нужно делать это внутри программы. Подскажите, пожалуйста, как мне монтировать его во время работы программы.


Ответы (2 шт):

Автор решения: PRODIGY

Для монтирования томов используется функция SetVolumeMountPointA(), но ей нужен GUID тома, который необходимо будет получить до размонтирования. GUID с назначенными им буквами возвращает штатная утилита ком.строки "mountvol", а программно его можно получить через GetVolumePathNamesForVolumeName() или GetVolumeNameForVolumeMountPointW(). Используя первую в связке с FindNextVolume(), я получаю у себя такой список GUID'ов:

введите сюда описание изображения

→ Ссылка
Автор решения: Qouk

Всё просто: необходимо закрыть дескриптор ранее открытого тома. Т.е

CloseHandle(hDisk);

И с этим я колупал мозги себе дней 10... А ведь на сайте микромягких всё написано:

Изменение файловой системы тома
1.Откройте том.
2.Блокировка тома.
3.Отформатируйте том.
4.Отключите том.
5.Разблокируйте том.
6.Закройте дескриптор тома.

https://learn.microsoft.com/ru-ru/windows/win32/api/winioctl/ni-winioctl-fsctl_dismount_volume

→ Ссылка