|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.10.2011, 20:59 | #1 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
Как взять серийный номер винчестера через IOCTL
Добрый всем. Возникла задача - с помощью винапи узнать серийник всех физических дисков. Задачу решил на половину - на одних компах серийные номера определяются, на других они пустые.
Выкладываю сюда, все что сам понял, нашел и сваял: Константы InOut Controls: http://source.winehq.org/source/include/ntddstor.h http://source.winehq.org/source/include/winioctl.h#L22 По функции DeviceIoControl: http://msdn.microsoft.com/en-us/libr...16(VS.85).aspx http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx Моя реализация кода: Код:
А вообще суть темы в том, что я делаю неправильно в этом коде? Есть подозрение, что неверно портирована одна из структур STORAGE_DEVICE_DESCRIPTOR или STORAGE_PROPERTY_QUERY. Камрады программистской мысли, если знаете решение, поделитесь пожалуйста правильным подходом или ткните вразумительной ссылкой на сие чтиво. Хотя последнее врядли - этот вопрос уже поднимается 5 лет точно судя по всем просмотренным мной форумам. Решение через WMI не предлагать, только WinApi, если это вообще возможно. Жду предложений!
"ковыряю изнутри" (с)
Последний раз редактировалось 3D Hunter; 18.10.2011 в 21:02. |
23.10.2011, 20:41 | #2 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
Неужели никто не сталкивался с подобным решением задачи?
"ковыряю изнутри" (с)
|
23.10.2011, 22:26 | #3 | |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
Цитата:
И еще, под другими "компами" имеются ввиду машины с семеркой, есть какая-либо статистика?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
|
24.10.2011, 10:53 | #4 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
В разделе железа вроде выкладывали пару месяцев назад исходник на эту тему.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
29.10.2011, 14:00 | #5 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
посмотрел темы по этому поводу... щас буду исходники юзать что народ приложил... а вот мой код на одних компах определяет сериники, а на других видит их пустыми, т.е. в списке пустые строки и все. Статистика и закономерность не выявлена, на одних машинах под вин 2003 сервер видит, под другой с той же ОС не видит. На семерке тоже самое, на моем ноуте видит, на ноуте друга нет, хотя винты у нах одинаковые модели! GetOverlappedResult щас буду шарить...
"ковыряю изнутри" (с)
|
01.11.2011, 12:59 | #6 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
все исходники тем в разделе железа нерабочие! проверено! у друга ноутбук леново, и винт упорно не хочет идентифицироваться любым из предложенных решений!
А что делает функция GetOverlappedResult и что тако структура _Overlapped?
"ковыряю изнутри" (с)
|
01.11.2011, 15:23 | #7 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
в продолжение исследований выявлен такой факт:
серийный номер винчестера может быть представлен как номерами ANSI-символов, так и сразу буквенными значениями. В принципе, это решило часть проблем... но есть винты, у которых сдвиг ненулевой по серийнику, но длина получаемой строки равна нулю. Было предположение что данные могут отдаватсься драйвером в oem-кодировке, но это не так. Если у кого есть мысли или идеи, пишите! А я разбираюсь дальше... P.S. Кстати, Overlapped'ом с помощью GetOverlappedResult() сосчитал реальный размер в байтах, он не нулевой, число больше любого из сдвигов структуры STORAGE_DEVICE_DESCRIPTOR. На тех компах, где серийник пустой, GetLastError возвращает стабильно 87 (The parameter is incorrect). На 3х машинах стоит по винту: 1) ST9250315AS с прошивкой 0001SDM1 2) ST9160314AS с прошивкой 0001SDM1 3) ST9250315AS с прошивкой 0001SDM1 Видно, что прошивка одинаковая, и SerialNumberOffset=0! Хотя в моем ноутбуке такой же винт что на машинах 1) и 3), но в нем все определяется на ура... Кто знает, в чем причина?
"ковыряю изнутри" (с)
Последний раз редактировалось 3D Hunter; 01.11.2011 в 15:58. |
01.11.2011, 16:00 | #8 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
Привожу код с комментами этой функции:
Код:
"ковыряю изнутри" (с)
Последний раз редактировалось 3D Hunter; 01.11.2011 в 16:04. |
01.11.2011, 16:01 | #9 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
продолжение...
Код:
"ковыряю изнутри" (с)
|
19.11.2011, 19:37 | #10 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
люди, так никто не знает ответа? Может дело в каком-то нюансе, и всего-то...
"ковыряю изнутри" (с)
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Серийный номер винчестера | NetSpace | Компьютерное железо | 28 | 30.03.2012 14:17 |
Серийный номер hdd через wmi | xil | C# (си шарп) | 3 | 08.09.2011 12:04 |
Серийный номер HDD ?! | $T@LKER | Общие вопросы Delphi | 32 | 26.02.2011 10:55 |
по букве тома определить физический серийный номер накопителя, а не номер тома | @лександр | Помощь студентам | 6 | 23.09.2010 15:05 |
J2me как скачать и получить серийный номер для Эмулятора Nokia?? | Tik-Tik | Общие вопросы по Java, Java SE, Kotlin | 0 | 26.08.2009 20:00 |