![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| AndreyRus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.3.2006 Репутация: нет Всего: нет |
Здравствуйте!
Известен ли кому нибудь способ остановки двигателя в жестком диске без использования DeviceIOControl? |
|||
|
||||
| misha_mike |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 1.6.2007 Репутация: нет Всего: 1 |
А чем DeviceIOControl не устраивает? Можно через порты, но это только в режиме ядра.
|
|||
|
||||
| AndreyRus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.3.2006 Репутация: нет Всего: нет |
Знаете 100% способ с DeviceIOControl? Лично я нет. Например не могу на nForce с их "фирменными" драйверами.
|
|||
|
||||
| misha_mike |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 1.6.2007 Репутация: нет Всего: 1 |
А 100%-го способа и нет. Например у SCSI-дисков вообще этой функции нет (аппаратно), а если учесть что многие современные контроллеры не являются IDE/ATA-совместимыми, то у них это может быть как угодно, вплоть до "никак".... В прочем в режиме ядра можно попробовать, есть компонент IOPort, который динамически загружает свой драйвер и позволяет писать в порты. Еще есть что-то в ResKit-е для winnt, что открывает доступ к портам для ring3-приложения. Сам код имет примерно такой вид:
Это сообщение отредактировал(а) misha_mike - 11.6.2007, 14:01 |
|||
|
||||
| AndreyRus |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.3.2006 Репутация: нет Всего: нет |
Использование прямого доступа к портам жесткого диска очень опасно! Нужно использовать API, если не хотите разрушить файловую систему. |
||||
|
|||||
| misha_mike |
|
||||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 1.6.2007 Репутация: нет Всего: 1 |
Хорошо, выражусь помягче: ни разу не видел потушенный SCSI-драйв, зато много-много раз видел в BIOS-ах материнских плат в разделе Power Management коммент типа "Parameter 'HDD Power Down' not affected for SCSI hard drives", так что по крайней мере единого интерфейса управления питанием нет (или не было в течении весьма продолжительного времени).
В каком смысле? Используется стандартный IDE-порт? К сожалению даже тут никто и ничего не обещает. Взять к примеру IDE-контроллер, подключаемый посредством USB (или как его неграмотно называют "переходник USB-IDE"). С точки зрения системы он ничем не хуже привычного PCI-ного контроллера, но что из стандартного набора ATA-команд он там у себя внутри реализует, а что нет -- неизвестно, и это полностью лежит на совести производителя (или драйверописателя). Более того, я могу сказать что имеющийся у меня такой контроллер команду spindown не поддерживает. Вот и выходит: вроде и IDE/ATA, но не совсем.
Кто ж спорит?
API -- это и есть DeviceIOControl, так что или-или... |
||||||||||||
|
|||||||||||||
| AndreyRus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.3.2006 Репутация: нет Всего: нет |
Под API я имел функцию отличную от DeviceIOControl. Это сообщение отредактировал(а) AndreyRus - 11.6.2007, 18:37 |
|||
|
||||
| AndreyRus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.3.2006 Репутация: нет Всего: нет |
DeviceIOControl в купе с недокументированным кодом (2000, XP, XP SP1) и документированным (XP SP2, 2003, Vista) позволяет отправлять жесткому диску прямые ATA команды и соответственно проблем с остановкой двигателя нет. Проблема заключается в том, что в некоторых драйверах, вследствие их ущербности (nVidia, внешние контроллеры (S)ATA) такая возможность не реализована.
|
|||
|
||||
| misha_mike |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 1.6.2007 Репутация: нет Всего: 1 |
Что я и говорил в своих постах от 11.6.2007, 16:23 и 11.6.2007, 13:55....
Приведенные там же три ассемблерных строчки делают то же самое, но в обход драйвера. При этом все равно не факт что сам котроллер (как железяка) поймет эту команду и отсановит диск. |
|||
|
||||
| AndreyRus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.3.2006 Репутация: нет Всего: нет |
Стандартые команды ATA еще никто не отменил. Отключить ими двигатель легко и можно проктически на каждом винте без проблем. |
|||
|
||||
| misha_mike |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 1.6.2007 Репутация: нет Всего: 1 |
Правильно, и единственный гарантированный способ донести команду до контроллеа -- записать ее в соответсвующий порт. Я уже привел пример того, как IDE-контроллер не пропускает вполне стандартную и никем не отмененную ATA-команду, посланную средствами API. Если такое себе позволяет один, то чем другие "хуже"? Эра "стандартных команд" железа уходит, теперь драйвер -- царь и бог. А от железки требуется только поддержка самых базовых стандартных команд, чтобы ОС загрузилась (а если она интегрирована в материнку, то часто и этого не нужно). Если даже видеокарты не утруждают себя полноценной поддержкой VESA, то что говорить про другие девайсы. |
||||
|
|||||
| AndreyRus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.3.2006 Репутация: нет Всего: нет |
Знает ли кто-нибудь как отправить IRP'ы - IRP_MJ_POWER, IRP_MN_SET_POWER без использования драйвера? |
|||
|
||||
| misha_mike |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 1.6.2007 Репутация: нет Всего: 1 |
Контроллер -- это железка, а железки разные бывают. И некоторым из них стандартные порты по боку, у них свои диапазоны ввода-вывода, известные только драйверу.
Так IRP -- это как бы неотъемлемая часть именно взаимодействия с драйвером, на нем же она и заканчивается. Так что ИМХО само понятие "IRP в обход драйвера" лишено какого-либо смысла (примерно как вывод изображения в обход видеокарты). |
||||
|
|||||
| AndreyRus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.3.2006 Репутация: нет Всего: нет |
||||
|
||||
| misha_mike |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 1.6.2007 Репутация: нет Всего: 1 |
Так что такое в конце концов ATA-команда? Это некий байт, отправляемый в некий порт. И если наш контроллер просто физически не слушает этот порт/байт (или никто, включая драйвер, не знает какой порт/байт он слушает на предмет такой команды), то можно говорить что данную ATA-команду он не поддерживает, как не поддерживает spindown мой USB-контроллер на базе GL811...
Это сообщение отредактировал(а) misha_mike - 18.6.2007, 10:13 |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |