Диск / Раздел и уникальный идентификатор диска в Windows API

Хорошо, я хочу создать программу, которая может взять уникальный идентификатор диска (серийный номер?) И поместить его в базу данных, где он связывает идентификатор с некоторыми файлами. Если я хочу найти файл на чем-то похожем на флэш-накопитель (который может изменить букву диска), я присоединяю флэш-накопитель, моя программа ищет его уникальный идентификатор, ищет файлы на основе чего-то вроде stl :: map и преобразует уникальный идентификатор буквы диска.

Программа также должна распознавать разделы (очевидно), так что, возможно, uniqueid + номер раздела на устройстве.

Любые идеи о том, как я могу пойти по этому поводу? Я смотрю на исходный код EnumDisk (пример кода Windows), но включенный демо-файл .exe, похоже, не работает под Windows 7 (говорит, что он был совместим без восстановления из исходного кода).

Любой берущий?

Постскриптум Я получаю эту ошибку от ENumDisk.exe
«Создать файл не удалось с ошибкой: 5»

P.S.S. О, и я хочу, чтобы программа могла сканировать диски из других файловых систем и получать их серийные номера Я знаю, что это высокий заказ, но это моя конечная цель.

0

Решение

Вам повезло — Windows (в частности, диспетчер монтирования) поддерживает именно такую ​​базу данных уникальных идентификаторов томов. Посмотрите на API управления томами

Например, вы можете использовать GetVolumeNameForVolumeMountPoint получить уникальный идентификатор для данной точки монтирования (включая буквы дисков) даже съемных томов. Кроме того, поскольку том может иметь несколько точек монтирования, вы можете использовать FindFirst / NextVolumeMountpoint перечислить точки монтирования для данного идентификатора тома (GUID).

Повеселись!

3

Другие решения

Ошибка 5 — доступ запрещен. Это означает, что вы, скорее всего, работаете не как администратор. Если вы пытаетесь открыть физический диск, вы можете уйти, установив для параметра «dwDesiredAccess» значение 0. Это может привести к успешному открытию устройства, но последующие операции могут завершиться неудачей, в зависимости от того, какие функции API вы используете возвращенный дескриптор. с.

Что касается получения информации о разделе, посмотрите на IOCTL_DISK_GET_DRIVE_LAYOUT на MSDN в http://msdn.microsoft.com/en-us/library/windows/desktop/aa365173(v=vs.85).aspx и IOCTL_DISK_GET_PARTITION_INFO в http://msdn.microsoft.com/en-us/library/windows/desktop/aa365179(v=vs.85).aspx

Вы сможете собрать все разделы, даже те, которые принадлежат файловым системам, которые Windows не распознает.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector