MSStorageDriver_ATAPISmartData, структура VendorSpecific

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение Space » 09.05.2009 (Сб) 5:03

Нашёл пример получения температуры HDD в инете, но почему именно берётся элемент(194+5) не объясняется. Таблица значений SMART для температуры указывает на индекс 194. Так какова структура VendorSpecific? И что такое VendorSpecific2 и т.д.?
Код: Выделить всё
'HDD
    Set wbemServices = GetObject("winmgmts:" & "\\localhost\root\wmi")
    Set wbemObjectSet = wbemServices.InstancesOf("MSStorageDriver_ATAPISmartData")
    For Each Item In wbemObjectSet
'Dim x As Object
'For Each x In Item.properties_
' Debug.Print x.Name
'Next x

    For i = 0 To 361
       If Item.VendorSpecific(i) = 194 Then
        Temperature = Item.VendorSpecific(i + 5)
        Exit For
       End If
   Next
  Next

Ещё интересно, что по нижеприведённому коду температура процессора не обновляется, а температура харда - да. Почему?
Код: Выделить всё
'процессор
  Set wbemServices = GetObject("winmgmts:" & "\\localhost\root\wmi")
    Set wbemObjectSet = wbemServices.InstancesOf("MSAcpi_ThermalZoneTemperature")
    For Each Item In wbemObjectSet
'Dim x As Object
'For Each x In Item.properties_
' Debug.Print x.Name
'Next x
            Temperature = (Item.CurrentTemperature - 2732) / 10
    Next

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение awl100Alex » 09.05.2009 (Сб) 14:06

Space писал(а):...почему именно берётся элемент(194+5) не объясняется...

Читай в конце статьи...
http://www.interface.ru/home.asp?artId=20279

Кстати, через "Термальная зона ACPI" и теже IOCTL_xxx, возможно, получится решить и второй вопрос.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение Space » 09.05.2009 (Сб) 16:59

нет, ну там вообще свой алгоритм
Код: Выделить всё
Чтобы её вычислить, воспользуйтесь нижеприведённым кодом:
if (pDA.bAttrID = 194) or (pDA.bAttrID = 231) then
  Label7.Caption := 'Температура: '
    + inttostr((84  -  (pDA.bAttrValue  -  1) div 3))  +  #176  +  'C'

84-(x-1)/3 к чему это? :shock:
Код: Выделить всё
84  -  (pDA.bAttrValue  -  1) div 3

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение Space » 09.05.2009 (Сб) 17:05

awl100Alex писал(а):Кстати, через "Термальная зона ACPI" и теже IOCTL_xxx, возможно, получится решить и второй вопрос.

не понял...

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение awl100Alex » 09.05.2009 (Сб) 21:49

Space писал(а):84-(x-1)/3 к чему это? :shock:

Значения атрибутов S.M.A.R.T. хранятся в неком массиве данных (таблице).
Номер каждой ячейки соответствует определенному атрибуту. Как уже было указано, номера 190, 194, 231 хранят данные температур... http://ru.wikipedia.org/wiki/Технология_SMART
И, поскольку, технологию разработали американцы, то и значения температур, соответственно, хранятся в Фаренгейтах к тому же в шестнадцатеричном виде. Поэтому, сначала определяется наличие атрибута температур bAttrID (его может и не быть, если винт старый), затем в переменной bAttrValue получаем шестнадцатеричную температуру в Фаренгейтах, скажем – &H95 – это число в описании type... переводится в десятичное - 149.
Поэтому, автор привел формулу перевода этого значения из десятичного Фаренгейт в десятичный Цельсия...
x=149 F.
84-(x-1)/3 = 84 – (149 - 1)/3 = 35 С.

Space писал(а):не понял...

В примере по ссылке... используется технология обращения к драйверу устройства посредством вызова функции API – DeviceIoControl с управляющим кодом DFP_xxx или IOCTL_xxx. Я имел ввиду, что можно было бы попробовать применить такой же способ обращения непосредственно к драйверу ACPI и запросить в какой-нибудь инструкции IOCTL_xxx значение температуры датчика на кристалле CPU – то, что получает BIOS.
Хотя может быть и так, что IOCTL_xxx могут быть все IOCTL_INTERNAL_xxx, тогда из приложения запросить не получится никак, только через написание еще одного драйвера.
Вопрос в том, кто сможет это сделать? :(
Space писал(а):...почему именно берётся элемент(194+5)...

Если я правильно понял: WMI возвращает массив VendorSpecific в котором всё в куче - и номера атрибутов и значения. Вот потому, в цикле сначала идет поиск номера ячейки 194 (HDA temperature), а затем в 5-той позиции смещения читается значение температуры в Цельсиях.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение Space » 09.05.2009 (Сб) 22:00

Если я правильно понял: WMI возвращает массив VendorSpecific в котором всё в куче - и номера атрибутов и значения. Вот потому, в цикле сначала идет поиск номера ячейки 194 (HDA temperature), а затем в 5-той позиции смещения читается значение температуры в Цельсиях.

но ведь 194 может попасться и среди значений! Смотрел ещё один пример на С, там, похоже, каждый атрибут имеет 12 чисел Integer. Но тогда надо 194*12 +5!

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение Space » 09.05.2009 (Сб) 22:22

Поэтому, автор привел формулу перевода этого значения из десятичного Фаренгейт в десятичный Цельсия...
Я получаю сразу в цельсиях в моём коде по (194+5). Что за чудеса?

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение awl100Alex » 09.05.2009 (Сб) 22:25

Да, ты прав... Я писал предположительно - ничего не берусь утверждать. Но, вполне возможно, что WMI уже делает этот перевод...

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение awl100Alex » 09.05.2009 (Сб) 22:56

Нет... таки правильно... всё в куче! Но номера атрибутов получается уникальны. Вот посмотри сам.
Код: Выделить всё
Private Sub Form_Load()
Set objWMIService = GetObject("winmgmts:\\.\root\WMI")
Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM MSStorageDriver_ATAPISmartData", , 48)
For Each objItem In colItems
    If IsNull(objItem.VendorSpecific) Then
      Print "VendorSpecific: "
    Else
      MsgBox "VendorSpecific: " & Join(objItem.VendorSpecific, ",")
    End If
Next
End Sub

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение Space » 10.05.2009 (Вс) 2:09

сейчас они уникальны, но я так думаю, что не всегда. Очень сложно из Value исключить значения индексов, тем более, их довольно много. Например, та же температура может сильно колебаться или же Soft Read Error Rate 'Частота появления "программных" ошибок при чтении данных с диска по вине программного обеспечения, а не аппаратной части' может быть практически любым числом. Поэтому, я думаю, к записям надо обращаться как в Дельфи, через указатели. ?

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение awl100Alex » 10.05.2009 (Вс) 10:40

Space писал(а):но ведь 194 может попасться и среди значений! Смотрел ещё один пример на С, там, похоже, каждый атрибут имеет 12 чисел Integer. Но тогда надо 194*12 +5!

То есть, получается, что...
Код: Выделить всё
...For i = 0 To 361
If Item.VendorSpecific(i) = 194 Then
Temperature = Item.VendorSpecific(i + 5)
...

Является НЕкорректным! :(

Тогда уже, учитывая это, правильным будет...
Код: Выделить всё
Private Sub Form_Load()
  'Temperature HDD
  Set wbemServices = GetObject("winmgmts:" & "\\localhost\root\wmi")
  Set wbemObjectSet = wbemServices.InstancesOf("MSStorageDriver_ATAPISmartData")
  For Each objItems In wbemObjectSet
    For i = 2 To UBound(objItems.VendorSpecific) Step 12
        If objItems.VendorSpecific(i) = 194 Then
            'tempreture
            MsgBox objItems.VendorSpecific(i + 5) & Chr$(176) & "C"
        End If
    Next
  Next
End Sub

Вот, посмотри примеры кода здесь...
http://forums.ocsinventory-ng.org/viewtopic.php?id=3852
то, о чем ты говорил “...имеет 12 чисел Integer...” значит Step 12. Вот и обнаружили баг в первом коде. :)

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение Space » 10.05.2009 (Вс) 13:21

всё-таки я не понял, отколь дельфиист взял температуру в Фаренгейтах? Скорее всего, это число из структуры по смещению 3 (=130). Но, по расчётам оно не совпадает с цельсиями по смещению 5 (=36) . Также, у него странная формула перевода в цельсии. Настоящая формула вроде такая:
http://ru.wikipedia.org/wiki/%D0%93%D1% ... 1%82%D0%B0
И почему bAttrID находится по смещению 2, когда в структуре оно находится по смещению 0 (размер структуры 12 байт). Или я сравниваю с не той структурой?
У кого-нить есть запись с ID=231? Она существует одновременно с ID=194? Или это одна и та же температура, только почему-то заносится в разные места?
Код: Выделить всё
Private Type DRIVEATTRIBUTE
bAttrID As Byte         'Идентификатор атрибута
wStatusFlags As Integer 'Флаги состояния
bAttrValue As Byte      'Текущее нормализованное значение
bWorstValue As Byte     'Худшее значение
bRawValue(0 To 5) As Byte    'Текущее ненормализованное значение
bReserved As Byte       'Зарезервировано
End Type

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение iGrok » 10.05.2009 (Вс) 16:08

Space писал(а):У кого-нить есть запись с ID=231? Она существует одновременно с ID=194? Или это одна и та же температура, только почему-то заносится в разные места?

http://ru.wikipedia.org/wiki/SMART
Похоже, одна и та же. У меня её нет.
label:
cli
jmp label

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение awl100Alex » 10.05.2009 (Вс) 20:38

Space писал(а):всё-таки я не понял, отколь дельфиист взял температуру в Фаренгейтах?

Думаю, что правильным будет спросит у самого автора статьи Алексея Фоминова. Статья свежая, внизу пометка: "Дата публикации: 30.03.2009", значит и ответить должен. Там еще есть ссылки на комментарии, ну и автору... Попробуй, а потом отпишись о результатах. Мне тоже интересно, но не более, чем тебе.
Space писал(а):У кого-нить есть запись с ID=231?

У меня тоже нет. Но это не одно и тоже... Видимо, в более продвинутых винтах есть все три ID температуры - датчики в разных местах, и каждый выполняет свою отдельную роль. Вполне может быть, что ID=231 как раз стоит на самом контроллере, что не менее важно, чем значения ID всех остальных. Как думаешь?..

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение Space » 10.05.2009 (Вс) 20:50

я сперва думал, что это фишка каждого производителя, какой формат SMART ему выбирать. Может пихнуть T туда или туда. У дельфииста ещё в коде есть выбор версии структуры(!), связь которых с чем-то я не смог понять сразу, т.к. в Дельфях полный Null :) Возможно, поэтому ID ходит по смещению 2, а не 0, хотя... :?:

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение iGrok » 10.05.2009 (Вс) 22:18

Почитал, погуглил..
Итак:

1) Таки атрибуты за номерами 194 и 231 - это одна и та же температура. 190 - это температура внутри корпуса для WD, и какой-то странный мусор для Seagate. У остальных производителей её может и не быть. Как, впрочем, и 231й. Стандартной является 194я. Зачем её пихнули в два атрибута нигде не сказано. Причём 194 везде обозначается, как "температура внутри hdd", а 231, как просто "температура Hdd". Но это могут быть и "трудности перевода". (т.е. косяки про составлении сводных таблиц, я только на инглише инфу искал. На русском ничего вразумительного не нашёл вообще, кроме вики, и ещё пары статей вроде "С чем его едят.")

2) У дельфиста в коде на счёт температуры какой-то бред. Левые числа. Не знаю, в какую систему он пытается переводить значение, но по стандарту в SMART пишется температура в градусах цельсия.

3) Всего у винта может быть до 30 атрибутов. Есть некоторое кол-во стандартных атрибутов, одинаковых для всех производителей. Они могут отличаться названиями, но значат одно и то же. В частности это первый десяток, и атрибуты типа "Error Rate". Остальные производитель может определять как ему вздумается, и значить они могут что угодно.

4) Жалко, мало данных (проверил всего 4 винта).
В массиве, который выдаёт wmi:
Первые два числа - чёрте-что. На ноуте - 15, 0. На компе - 10, 0. Может, версия смарт. Может, тип винта. Может, ещё какая инфа.
Далее 30 групп по 12 чисел. Первое - номер атрибута. Второе - флаги(х.з. что это и зачем. Видимо определяет состояние атрибута и его "необходимость"). Третье - хз. У меня на всех винтах по нулям. 4е - "Значение", 5e - "Худшее", 6,7,8,9 - RAW VALUE (Т.е. 10,20,30,40 = &h0A141E28 = 169090600 ), 10,11,12 везде по нулям. Впрочем, 10й у меня на одном из винтов Seagate стоит для 190го атрибута.

UPD:
О. В одной из спецификаций нарыл, что 194 - это "Temperature of a hard disk assembly", а 231 - это "Temperature of a drive". Так что похоже awl100Alex правильно сомневался. Только 231я - это типа температура внутри диска. Впрочем, даже на "псевдосерверном" Seagate NS её нету, так что не думаю, что на неё имеет смысл обращать внимание. )

UPD2:
А всё проще.
Первые два байта - версия структуры. Можно не обращать внимания.
Далее по 12 байт на каждый атрибут. Там первый - номер атрибута, второй и третий - флаги, четвёртый - "значение". Остальное - "специфично для каждого производителя винтов."
http://www.t13.org/Documents/UploadedDo ... sAnnex.pdf

UPD3: Мда, блин. Прочитал пост Space с описанием структуры. Понял, почему 10й байт на одном из винтов задействован. А я такие её неправильно определил. )
label:
cli
jmp label

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение Space » 10.05.2009 (Вс) 23:16

а что значит КРИТИЧЕСКИЙ ПАРАМЕТР, например, Raw Read Error Rate (ID=1)? Суперважный? Или обязательный? Нифига се, у меня bAttrValue=bWorstValue=100. 100% частота появления ошибок при чтении данных с диска, происхождение которых обусловлено аппаратной частью диска? Нифига се... Как же у мя всё нормально копируется и проверка диска успешна? Винту 3 года и вроде новый купил. Проблем никогда не было. Только система иногда перезагружается... Но в этом виню QIP :)

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение iGrok » 10.05.2009 (Вс) 23:34

Space писал(а):а что значит КРИТИЧЕСКИЙ ПАРАМЕТР, например, Raw Read Error Rate (ID=1)? Суперважный? Или обязательный? Нифига се, у меня bAttrValue=bWorstValue=100. 100% частота появления ошибок при чтении данных с диска, происхождение которых обусловлено аппаратной частью диска? Нифига се... Как же у мя всё нормально копируется и проверка диска успешна? Винту 3 года и вроде новый купил. Проблем никогда не было. Только система иногда перезагружается... Но в этом виню QIP :)

Не. Критический - значит что значение этого параметра определяет общий SMART-статус винта. Т.е. если параметр "плохой", то статус винта "плохой".
Далее, Значение атрибута - это т.н. "нормализованное". Приведённое по какой-то внутренней, заданной производителем шкале. Реальное значение - это Raw Value. Если у тебя в Error Rate Value = Worst = 100, значит всё хорошо, и частота ошибок либо нулевая, либо ничтожно мала. :)

UPD:
Кстати, показатель "критичности" - это нулевой бит во флагах. Т.е. Critical = (FLAGS AND 1).
label:
cli
jmp label

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение Space » 13.05.2009 (Ср) 18:08

а как узнать структуру InstanceName? Перерыл весь инет и не нашёл :(

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение iGrok » 13.05.2009 (Ср) 18:19

Space писал(а):а как узнать структуру InstanceName? Перерыл весь инет и не нашёл :(

Какую структуру? Зачем?

У меня objItem.InstanceName.Value указывает на ключ, содержащий инфу о приводе в разделе "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum".

Или ты про что-то другое?
label:
cli
jmp label

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение Space » 13.05.2009 (Ср) 18:47

при Debug.Print Item.InstanceName.Value вылетает ошибка. Мне надо имя устройства выдрать оттуда.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение iGrok » 13.05.2009 (Ср) 19:44

Space писал(а):при Debug.Print Item.InstanceName.Value вылетает ошибка. Мне надо имя устройства выдрать оттуда.

Ну да. Ошибся. Просто Item.InstanceName...
У меня оно следующее. "IDE\DiskSAMSUNG_HM080II_________________________YE100-15\5&24cbc6ab&0&0.0.0_0"
А что значит "имя устройства" ?
Можешь залезть в реестр. В предыдущем посте я сказал, где этот ключ лежит. Там есть значение FriendlyName. Может, это то, что тебе нужно?
У меня, правда, нужно "_0" в конце отрезать, чтобы имя ключа получить..
label:
cli
jmp label

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение Space » 13.05.2009 (Ср) 20:12

мне надо "SAMSUNG_HM080II". Судя по всему, под имя резервируется 40 байт со смещения 8. Или нет? И почему пустые байты забиваются "_"?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение iGrok » 13.05.2009 (Ср) 20:43

Space писал(а):мне надо "SAMSUNG_HM080II". Судя по всему, под имя резервируется 40 байт со смещения 8. Или нет? И почему пустые байты забиваются "_"?

В последний раз повторяю. Читай из реестра FriendlyName. Там у меня лежит "SAMSUNG HM080II". Неужели так трудно посмотреть, что тебе советуют?
label:
cli
jmp label

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение awl100Alex » 13.05.2009 (Ср) 22:07

iGrok писал(а):Читай из реестра FriendlyName...

Это не очень удобно. Ты не понял... Как потом связать полученную температуру в WMI с данными имен HDD в реестре, если винтов несколько???
Space писал(а):мне надо "SAMSUNG_HM080II..."

Может это подойдет?...
Код: Выделить всё
Private Sub Form_Load()
  'Temperature HDD
  Set wbemServices = GetObject("winmgmts:" & "\\localhost\root\wmi")
  Set wbemObjectSet = wbemServices.InstancesOf("MSStorageDriver_ATAPISmartData")
  For Each objItems In wbemObjectSet
    For i = 2 To UBound(objItems.VendorSpecific) Step 12
       If objItems.VendorSpecific(i) = 194 Then
         'tempreture
         'objItems.VendorSpecific(i + 5) & Chr$(176) & "C"
         StrDisk = Split(objItems.InstanceName, "Disk")
         GetDisk = Split(StrDisk(1), "_")
         MsgBox GetDisk(0) & " --> " & objItems.VendorSpecific(i + 5) & Chr$(176) & "C"
        End If
    Next
  Next
End Sub

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение awl100Alex » 13.05.2009 (Ср) 22:17

iGrok писал(а):...ключ, содержащий инфу о приводе в разделе "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum".

К тому же посмотри внимательно: этот ключ хранит сведения не только о текущих (активных!) устройствах, а также о всех других устройствах, которые когда-либо подключались ранее - несуществующих на данный момент! Например, извлеченный HDD из кармана тоже отобразится и запомнится в этом ключе. :(

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение Space » 13.05.2009 (Ср) 23:11

Я :D Люди, я уже знаю, как получить имя и откуда. Я только не уверен, что там под это имя отведено 40 байт. Может, там ещё появиться какая-то левая инфа. И что, awl100Alex , по твоему "Disk" является признаком начала поля с именем устройства? Тогда уж надо брать "\Disk". А может там просто 8 байт отведено под первое поле и "Disk" является в нём необязательным? Короче, люди, нужна структура. И не нервируйте меня! :)

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение iGrok » 13.05.2009 (Ср) 23:24

awl100Alex писал(а):К тому же посмотри внимательно: этот ключ хранит сведения не только о текущих (активных!) устройствах, а также о всех других устройствах, которые когда-либо подключались ранее - несуществующих на данный момент!

Ну ты, видимо, невнимательно прочитал, что:
"InstanceName указывает на ключ, содержащий инфу о приводе в разделе "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum"."

Потому, что если бы ты прочитал внимательно, и заодно посмотрел на InstanceName, ты бы увидел, что InstanceName соответствует подразделам "Enum"'а. И уже из этих подразделов можно вытащить нужную информацию.

Space, я уже три раза сказал, откуда тебе взять нужную инфу. Сейчас вот сказал в четвёртый, уже для awl100Alex.
Не надо изобретать ТАКИХ велосипедов...
label:
cli
jmp label

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение Space » 14.05.2009 (Чт) 0:29

ладно, будем ломиться в реестр. Но ведь ID диска всегда содержит и его имя? И что значит конечный "_0"? Всегда ли он будет таким или как его учитывать для получения нормального имени ключа? :)

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: MSStorageDriver_ATAPISmartData, структура VendorSpecific

Сообщение awl100Alex » 14.05.2009 (Чт) 0:44

Space писал(а):Я только не уверен, что там под это имя отведено 40 байт.

SAMSUNG SpinPoint V40 SV4002H (а почему бы и нет?..) – уже 29... Что тебя так смущает? Какая еще левая инфа, кроме имени, там может появится?
Space писал(а):awl100Alex , по твоему "Disk" является признаком начала поля с именем устройства?

Это не поле. Я взял этот аргумент условно, как разделитель. Ну что там еще может быть, кроме как "Disk" перед именем устройства?
iGrok писал(а):Ну ты, видимо, невнимательно прочитал...

Да, каюсь... :oops: Есть такой «пробел». Значение FriendlyName отображает как раз имя HDD. Вот только нужно дополнительно юзать API с реестром. :(

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 42

    TopList  
cron