|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
|
Получение информации о накопителе, с которого запущена система02.10.2014, 08:01. Показов 5276. Ответов 16
Метки нет (Все метки)
Какие существуют способы получения информации о накопителе (hdd/ssd) с которого запущена операционная система.
Нужно получить хотя бы имя устройства и InstanceID. Была идея такая: получить путь по которому хранятся данные системы, вычленить букву раздела и по ней определить какой накопитель имеет эту букву диска путем проверки каждого из перечисления накопителей. Таким образом всю необходимую информацию получить не проблема, но мне кажется это велосипедом. И к тому же, я не нашел способа, как получить буквы разделов для конкретного накопителя. Прошу помощи!
0
|
|
| 02.10.2014, 08:01 | |
|
Ответы с готовыми решениями:
16
Узнать внешний IP компьютера с которого запущена программа Как узнать какая система запущена При запуске ноутбука выходит ошибка, что система запущена некорректно |
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
| 03.10.2014, 01:33 | |
|
GetSystemWindowsDirectory(...) для получения директории ОС.
GetVolumeInformation(...) для получения более полной информации... Капать можно и дальше.
0
|
|
|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
|
| 03.10.2014, 08:43 [ТС] | |
|
По GetVolumeInformation я могу получить имя тома и его серийник. А как от этой информации перейти к самому устройству, на котором находится этот раздел?
0
|
|
| 03.10.2014, 13:18 | |
|
Не по теме: dBuSh83, а ты хорошо погуглил? Когда мне надо было - я за 5 минут нашёл и примеры и описание, и даже созхранил себе на комп отдельным файлом... Не уж то так лень что то делать? - Ну от лени лекарство только "удариться головой об стену".
0
|
|
|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
||
| 05.10.2014, 12:21 [ТС] | ||
|
А теперь еще раз о проблеме поподробнее: я посредством SetupDiEnumDeviceInfo перечисляю по guidклассу все накопители(жесткие диски, твердотельные и usb-флешки), но устройство с запущенной системой (предположительно physicalDevice0) мне нужно проигнорировать. Вот именно это я и не могу определить.
0
|
||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
| 05.10.2014, 13:32 | |
|
dBuSh83, я так понял что вопрос касается не только установленных ОС, но и "живых"? Если так, то предполагаю что в реестре должна быть инфа, доступ к реестру: RegOpenKeyEx() и далее RegQueryValueEx()
Либо, ну ты сам скажи почему GetSystemWindowsDirectory не подходит, а далее подумай какие параметры отличат устройство, возможно название папки, файлы опр., и т.п.
0
|
|
|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
|||
| 05.10.2014, 13:42 [ТС] | |||
|
0
|
|||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||
| 05.10.2014, 16:18 | ||
|
Тут пример: http://cpprog.narod.ru/visualc/25.html
Добавлено через 4 минуты Давай первое, филосовский взгляд: Правильно заданный вопрос - это уже половина ответа. Второе: ну ты же "вычленил букву", так что же тебе ещё надо? Тебе я так понял надо доп инфу по диску.. так после нахождения буквы раздела - бери и используй GetVolumeInformation()... так как показано в примере.
1
|
||
|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
||||||||
| 05.10.2014, 16:41 [ТС] | ||||||||
|
Кликните здесь для просмотра всего текста
В IsSystemDevice(DeviceInfoData) мне нужно проверить, располагается ли на текущем устройстве (DeviceInfoData) запущенная система.
0
|
||||||||
|
Ушел с форума
|
|
| 05.10.2014, 17:02 | |
|
Я бы попробовал сделать следующим образом.
1) С помощью SHGetFolderPath с CSIDL_WINDOWS получить путь к папке Windows, путь обрезать до буквы диска, а затем через QueryDosDevice узнать имя устройства, на которое этот путь указывает. Пускай, например, получится путь "\Device\HarddiskVolume2". 2) С помощью Setup API перечислить все устройства, поддерживающие интерфейс GUID_DEVINTERFACE_DISK (SetupDiGetClassDevs + SetupDiEnumDeviceInterfaces). 3) Для каждого найденного диска получить символьную ссылку: SetupDiGetDeviceInterfaceDetail. 4) Открыть Mount Manager (CreateFile + "\\.\MountPointManager") и с помощью IOCTL_MOUNTMGR_QUERY_POINTS запросить у него все точки монтирования для каждого диска. На выходе для каждого диска будет получен массив структур MOUNTMGR_MOUNT_POINT, каждая из которых описывает один из томов диска или одну из его точек монтирования (что, по большому счету, одно и то же). В каждой структуре будет имя тома, его символьная ссылка и ID. 5) Для каждой найденной ссылки определяется имя устройства (QueryDosDevice), которое затем сравнивается с именем, полученным в пункте 1. Если найдено совпадение, значит диск, массив структур MOUNTMGR_MOUNT_POINT которого содержит данную ссылку, и является диском, с которого загружена система.
1
|
|
|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
|
| 05.10.2014, 17:39 [ТС] | |
|
Спасибо! Похоже на то, что мне нужно! Как проверю, отпишусь.
0
|
|
|
Ушел с форума
|
|
| 05.10.2014, 23:12 | |
|
Сейчас попробовал вариант, который сам написал. Mount Manager-у нужна
ссылка на volume, а не на disk. И для разрешения символьных ссылок мощнее NtOpenSymbolicLinkObject/NtQuerySymbolicLinkObject, а не QueryDosDevice. Ну в общем, не работает этот "рецепт". Как будет время, попробую пореверсить, откуда берет список дисков диспетчер устройств. Он же как-то это делает.
0
|
|
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
| 06.10.2014, 00:08 | |
|
А ответ от сюда не подойдёт? http://forum.sources.ru/index.php?showtopic=271122
Добавлено через 12 минут Ну или если хочется пошаманить, почему бы не изучить ветви реестра в "HKEY_LOCAL_MACHINE/HARDWARE" и найти там хард диск и взять его номер оттуда? А там уже по ходу дела посмотреть где хранится код исполнения файла запуска ОС, и плясать дальше?.. Бред сивой кобылы конешно, но если уж WMI не нравится, то бубном надо с фантазией пользоваться))) Добавлено через 14 минут Посмотрел (от пива в голове видимо, так бы фильм какой нить смотрел уже, но кончились, даже продолжения кунг-фу панды нет^^), в реестре: "HKEY_LOCAL_MACHINE/SYSTEM/setup" есть значение WorkingDirectory, там написанно С:\Windows\Panther, может это как раз и есть основной сетап файл для винды (юзаю 7). Исходя из этого есть буква дирректории. Почему я это написал - потому что функция GetSystemWindowsDirectory ищет лишь название папки system32, но ведь если захочется кому то хакнуть, то ясен пень можно создать и на другом диске такую же папку, и функция выдаст не верный результат. Кстати, автор, нафиг вам вся эта пень-телега с HDD? (ежели вы защищаете свой продукт, то ну если это не фурор в области программинга, то можно и через GetVolumeInformation просто ид тома взять и не париться)
0
|
|
|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
||
| 08.10.2014, 19:16 [ТС] | ||
|
А способ я нашел: получить хендл с помошью setup api у меня получилось с помощью физического имени SetupDiGetDeviceRegistryProperty(SPDRP_P HYSICAL_DEVICE_OBJECT_NAME) и ntCreateFile (пример). По хендлу я получил номер диска через DeviceIoControl(IOCTL_STORAGE_GET_DEVICE _NUMBER). Для нахождения системного диска я взял по GetSystemWindowsDirectory получил букву диска и через createFile получил его хендл. Затем уже к этому хендлу применил DeviceIoControl(IOCTL_STORAGE_GET_DEVICE _NUMBER) и получил номер диска системного раздела. Если совпало, то диск найден, иначе проверял следующий диск. Остался один пунктик по поводу того, что шиндовс отказывается выдавать хендл системного раздела с GENERIC_READ или, тем более, GENERIC_WRITE.
2
|
||
|
Ушел с форума
|
|||
| 08.10.2014, 21:02 | |||
|
Changes to the file system and to the storage stack to restrict direct disk access and direct volume access in Windows Vista and in Windows Server 2008 https://support2.microsoft.com/kb/942448/en Добавлено через 3 минуты Добавлено через 8 минут Но способ любопытный, надо будет попробовать.
0
|
|||
|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
|||
| 11.10.2014, 11:46 [ТС] | |||
|
Вроде все получается, системный диск адекватно теперь игнорируется.
0
|
|||
|
Ушел с форума
|
||
| 11.10.2014, 11:57 | ||
|
А статьи, с цитатами вроде "ребята из Майкрософт изрядно наложили в штаны" и "поскольку вся винда написана через то место, на котором сидят" лучше вообще не читать, т.к. их авторы, как правило, ничего в безопасности не смыслят.
0
|
||
| 11.10.2014, 11:57 | |
|
Помогаю со студенческими работами здесь
17
Какой командой можно определить под каким пользователем (имя) запущена система? Бесконечная перезагрузка с сообщением "система запущена некорректно"
Получение информации из AD Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|