![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Список всех дисков (не томов, именно физических дисков).
guav © (2007-11-20 12:29:00)Как можно получить список всех установленных дисков ?
Я находил следующие варианты:
1. Получить список всех томов, затем получить id для каждого диска.
2. Пробовать \\.\PhysicalDrive%d с %d от 0 до первой ошибки
3. Пробовать \\.\PhysicalDrive%d с %d от 0 до MAX_DRIVES
Ни один из вариантов мне не нравится, есть ли варианты получше ?
guav (2007-11-29 11:43:00) [1]> А чего она такая маленькая ? Всего 2 GB :)
А разве старые больше ?
Вот за апрель 2007 такая же http://www.microsoft.com/downloads/details.aspx?FamilyID=B8704100-0127-4D88-9B5D-896B9B388313&displaylang=enа предыдущие ещё меньше.
Riply (2007-11-29 00:30:00) [2]> [55] guav © (28.11.07 22:57)
> Сорри, сегодня не было времени глянуть эту константу...
Да я ее уже проверила: все правильно.
> Про UniqueId пишут там же, в MSDN :)
Нашла. Спасибо.
> Я бы воспользовался этим:
> If the input triple is empty, the mount manager returns the entire mounted device list.
> и дальше бы сам прошелся по томам, анализируя другие два параметры.
Я так и делаю. Поэтому и возник вопрос про UniqueId.
> На правах рекламы: вышла новая Visual Studio, это наверное тебя не интересует,
> но вместе с ней вышла и новая MSDN Library
А чего она такая маленькая ? Всего 2 GB :)
guav (2007-11-28 22:57:00) [3]Сорри, сегодня не было времени глянуть эту константу...
Про UniqueId пишут там же, в MSDN :)
http://msdn2.microsoft.com/en-us/library/ms802377.aspx
Я бы воспользовался этим:
If the input triple is empty, the mount manager returns the entire mounted device list.
и дальше бы сам прошелся по томам, анализируя другие два параметры.
Это не единственный способ перечислить разделы и их точки подключения, но похоже, что он самый удобный.
На правах рекламы: вышла новая Visual Studio, это наверное тебя не интересует, но вместе с ней вышла и новая MSDN Library http://www.microsoft.com/downloads/details.aspx?FamilyID=6ff3bc60-32c8-4c22-8591-a20bf8dff1a2&DisplayLang=en
Riply (2007-11-28 19:11:00) [4]> [47] guav © (27.11.07 17:05)
Еще раз спасибо. Теперь есть полная навигация :)
А ты сам не разбирался с IOCTL_MOUNTMGR_QUERY_POINTS ?
Может подскажешь: в MOUNTMGR_MOUNT_POINT, что они подразумевают под UniqueId ?
И размер у него какой-то странный: 12 Byte.
guav (2007-11-27 22:48:00) [5]> [52] Riply © (27.11.07 22:01)
Ой не боюсь не скажу сегодня... я как раз снёс предыдущие версии срдеств разработки MS, чтобы поставить VS 2008 Express, и застрял на сносе самой VS 2008 beta, там ошибка в анинсталле и ни туда ни сюда :(
Кстати, здесь можжно глянуть уже переведнные SetupApi, Native API, также в win32api объявление других IOCTL с раскрытым CTL_CODE, можно по аналогии сделать.
http://jedi-apilib.sourceforge.net/
PS: Почту глянь :)
Riply (2007-11-27 22:01:00) [6]> [50] guav © (27.11.07 17:43)
А чему равен IOCTL_MOUNTMGR_QUERY_POINTS ? 7143432 ?
Дело в том, что не очень люблю определения чего-то через "строки" типа:
#define MOUNTMGRCONTROLTYPE ((ULONG)'m')
#define IOCTL_MOUNTMGR_QUERY_POINTS \
CTL_CODE(MOUNTMGRCONTROLTYPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
Так и до ошибки не далеко, а рядом всякие "IOCTL_MOUNTMGR_DELETE_" - ы :)
guav (2007-11-27 18:17:00) [7]Проблема получения номера диска из '\Device\Ide\IdeDeviceP2T0L0-5' тоже решается через IOCTL код.
IOCTL_STORAGE_GET_DEVICE_NUMBER
guav (2007-11-27 17:43:00) [8]> [49] Riply © (27.11.07 17:28)
> Изменился подход к решению задачи ?
Нет, это просто другая задача. Не будеv вдаватmся в детали :)
> Спасибо. Пойду пробовать.
Ещё, чтоб те долго не думать, чему слать IOCTL_MOUNTMGR_QUERY_POINTS - шли этому:
CreateFile('\\.\MountPointManager', 0, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0)
Riply (2007-11-27 17:28:00) [9]> [47] guav © (27.11.07 17:05)
Тебя же (если я ничего не путаю) не устраивал DeviceIoControl ?
Изменился подход к решению задачи ?
> Предлагаю для решения задачи сопоставления томов и дисков использовать IOCTL_MOUNTMGR_QUERY_POINTS
> для сопоставления имён томов и символьных ссылок на них и IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS
> или IOCTL_VOLUME_LOGICAL_TO_PHYSICAL для сопоставления разделов и номеров физических дисков.
Спасибо. Пойду пробовать.
slow!alfamoon!com (2007-11-27 17:11:00) [10]Тоже вариант
guav (2007-11-27 17:05:00) [11]Предлагаю для решения задачи сопоставления томов и дисков использовать IOCTL_MOUNTMGR_QUERY_POINTS для сопоставления имён томов и символьных ссылок на них и IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS или IOCTL_VOLUME_LOGICAL_TO_PHYSICAL для сопоставления разделов и номеров физических дисков.
slow!alfamoon!com (2007-11-27 16:13:00) [12]
>
> А можно аргументировать ? :)
>
> P.S.
> Я доверяю только трем известным производителям
> програмного обеспечения: Microsoft, Borland и Riply :)
>
Можно.
1) Количество мест автозагрузки в OSAM больше чем в autoruns
2) Доступ к реестру без использования API (как к файлу)
3) Визуально удобнее и информации больше.
Riply (2007-11-27 11:53:00) [13]> [44] slow!alfamoon!com (27.11.07 10:34)
> Лучше OSAM от online-solutions нежели autoruns от Руссиновича
А можно аргументировать ? :)
P.S.
Я доверяю только трем известным производителям
програмного обеспечения: Microsoft, Borland и Riply :)
slow!alfamoon!com (2007-11-27 10:34:00) [14]Riply,
На мой взгляд, лучше (и удобнее) использовать WinObjEx (можно взять в разделе Инструменты на wasm.ru), чем аналогичный утиль от Руссиновича. Аналогично с autoruns.. Лучше OSAM от online-solutions нежели autoruns от Руссиновича (проверял)
Riply (2007-11-27 04:01:00) [15]ArcName все же не совсем то.
В ней только "стационарные" объекты.
Во всяком случае, у меня Zip disk`а и флешек в ней нет.
Очень не плохо получается, если взять за корень \Device
и перебрать все ее содержимое (не рекурсивно), фильтруя по
OBJECT_DIRECTORY_INFORMATION.TypeName равным Directory.
Остается совсем мало объектов, среди которых
сидят и все HardDisk%d. (у меня присутствуют все).
Что и требовалось :)
А как бонус за все страдания: внутри них, на блюдечке с голубой каемочкой,
находим имена их партишенов
(сканировать с фильтром Obj.TypeName равным SymbolicLink).
P.S.
Реклама:
Летайте самолетами... Тьфу !
Пользуйтесь утилитами от Mark Russinovich.
Смотрите на систему с высоты птичьего полета ! :)
Riply (2007-11-27 01:16:00) [16]>[41] Riply © (27.11.07 01:13)
Sorry.
Не ту функциюию скопипайстила :)
NtOpenSymbolicLinkObject читать как NtQuerySymbolicLinkObject
Riply (2007-11-27 01:13:00) [17]> [40] Riply © (27.11.07 00:56)
> А каким образом они получают SymLink ?
А ларчик просто открывался: NtOpenSymbolicLinkObject :)
Riply (2007-11-27 00:56:00) [18]> [38] slow!alfamoon!com (26.11.07 23:36)
Спасибо.
Ну "Name" из "ArcName" получить на сложно.
А каким образом они получают SymLink ?
guav (2007-11-27 00:25:00) [19]> [38] slow!alfamoon!com (26.11.07 23:36)
хорошее прдложение.
slow!alfamoon!com (2007-11-26 23:36:00) [20]Позвольте вмешаться в вашу высоконаучную беседу с предложением воспользоваться WinObjEx от Four-F и внимательно посмотреть на содержимое директории ArcName