Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Инфо по винту... [D7, Win2k, WinXP]


DION ©   (2004-07-12 08:14:00) 

Народ, подскажите, как узнать имя винта...?


DION   (2004-07-12 12:45:00) [1]

Всем пасиб...
Особенный респект to Alex Konshin...
Как раз то что нужно...


Alex Konshin   (2004-07-12 12:25:00) [2]

Aldor_   (12.07.04 12:18) [7]
Большое спасибо.
А вот это:
 > что это позволяет обойти запрет доступа к устройству
действительно круто :))))

Собственно, это и есть мое личное know how в том примере, остальное люди делали и знали раньше. А вот собственно для SCSI такой прием не проходит :(


Aldor_   (2004-07-12 12:18:00) [3]

Большое спасибо.

 А вот это:
  > что это позволяет обойти запрет доступа к устройству
 действительно круто :))))


Alex Konshin   (2004-07-12 12:15:00) [4]

Так надо (c) Бриллиантовая рука :)

\\.\Scsi потому, что на самом деле тот Ioctl код, что я использую, работает не с драйвером винчестера, а с дравером контроллера. Другое дело, что он потом передает команду драйверу соответствующего устройства. А сделано так хитро потому, что это позволяет обойти запрет доступа к устройству, т.к. по умолчанию для дисков это может делать только администратор, а вот для контролеров почему-то все, кто угодно.

Почему $A0 or ((DriveNumber and 1) shl 4)? Вообще-то биты 7 и 5 obsolete, но вроде как желательно их установить (и не спрашивайте меня "почему?"). Бит 4 - номер девайса (т.к. для ATA их может быть всего два, то бита достаточно). Смотрите http://www.t13.org/docs2003/d1532v1r4.pdf

Почему Вы останавливаетесь на первом же попавшемся устройстве? А если их несколько?Потому что это пример. Потому что функция возвращает только один результат - строку. Потому что обычно люди используют его для получения серийного номера первого винчестера (обычно для привязки к железу, и не спрашивайте меня "почему?"). Если вам нужны другие - переделать не составляет большого труда.


Aldor_   (2004-07-12 11:24:00) [5]

Alex Konshin ©   (12.07.04 11:01) [4]

 Уже давно хотел задать Вам вопрос: в Вашем примере первым аргументом функции CreateFile является '\\.\Scsi', но при этом совершенно корректно читается информация об IDE-винчестерах! Хотя я по наивности думал, что нужно использовать '\\.\PHYSICALDRIVEx'.

 И еще: возможно я недочитал хелп, но почему используются такие пляски с DriveNumber: $A0 or ((DriveNumber and 1) shl 4)?

 И последнее, если позволите:

for iController := 0 to maxController do
 begin
   for iDrive := 0 to 4 do
   begin
     try
       Result := GetIdeDiskSerialNumber(iController,iDrive);
        if Result<>'' then Exit;
     except
       // ignore exceptions
     end;
   end;
 end;

Почему Вы останавливаетесь на первом же попавшемся устройстве? А если их несколько?

 Буду благодарен за ответы. С уважанием.


Alex Konshin   (2004-07-12 11:01:00) [6]

http://home.earthlink.net/~akonshin/index.htm


DC-AC   (2004-07-12 10:50:00) [7]

Тебе Алекс Коншин нужен. К сожалению запамятовал его страничку, посмотри на этом сервере, может и есть ссылка. У него есть чудный модуль для работы с HDD, вот с помощью него и "вытянешь" из контроллера HDD его производителя. Если поиски не увенчаются успехом - напиши мне, скину исходники. Может правда не самые новые...


DION   (2004-07-12 09:41:00) [8]

Мануфактуру...


DC-AC   (2004-07-12 09:10:00) [9]

В смысле имя ? Как его мама при рождении назвала что ли ? Или логическое имя диска ? Или название производителя/модели ?
Вот видишь сколько вопросов...


Наверх

Титульная страница Поиск, карта сайта Написать письмо