![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Инфо по винту... [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]В смысле имя ? Как его мама при рождении назвала что ли ? Или логическое имя диска ? Или название производителя/модели ?
Вот видишь сколько вопросов...