Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Остановка двигателя HDD 
:(
    Опции темы
AndreyRus
Дата 11.6.2007, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 18.3.2006

Репутация: нет
Всего: нет



Здравствуйте!

Известен ли кому нибудь способ остановки двигателя в жестком диске без использования DeviceIOControl?
PM MAIL   Вверх
misha_mike
Дата 11.6.2007, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 1.6.2007

Репутация: нет
Всего: 1



А чем DeviceIOControl не устраивает? Можно через порты, но это только в режиме ядра.
PM MAIL   Вверх
AndreyRus
Дата 11.6.2007, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 18.3.2006

Репутация: нет
Всего: нет



Знаете 100% способ с DeviceIOControl? Лично я нет. Например не могу на nForce с их "фирменными" драйверами.
PM MAIL   Вверх
misha_mike
Дата 11.6.2007, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 1.6.2007

Репутация: нет
Всего: 1



А 100%-го способа и нет. Например у SCSI-дисков вообще этой функции нет (аппаратно), а если учесть что многие современные контроллеры не являются IDE/ATA-совместимыми, то у них это может быть как угодно, вплоть до "никак".... В прочем в режиме ядра можно попробовать, есть компонент IOPort, который динамически загружает свой драйвер и позволяет писать в порты. Еще есть что-то в ResKit-е для winnt, что открывает доступ к портам для ring3-приложения. Сам код имет примерно такой вид:

Код

  mov al, 0E6h
  mov dx, 1F7h
  out dx, al  


Это сообщение отредактировал(а) misha_mike - 11.6.2007, 14:01
PM MAIL   Вверх
AndreyRus
Дата 11.6.2007, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 18.3.2006

Репутация: нет
Всего: нет



Цитата

Например у SCSI-дисков вообще этой функции нет (аппаратно)
Терзают меня смутные сомненья.

Цитата

а если учесть что многие современные контроллеры не являются IDE/ATA-совместимыми
Ситуация прямо противополжная.

Использование прямого доступа к портам жесткого диска очень опасно! Нужно использовать API, если не хотите разрушить файловую систему.
PM MAIL   Вверх
misha_mike
Дата 11.6.2007, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 1.6.2007

Репутация: нет
Всего: 1



Цитата
Цитата

Например у SCSI-дисков вообще этой функции нет (аппаратно)
Терзают меня смутные сомненья.

Хорошо, выражусь помягче: ни разу не видел потушенный SCSI-драйв, зато много-много раз видел в BIOS-ах материнских плат в разделе Power Management коммент типа "Parameter 'HDD Power Down' not affected for SCSI hard drives", так что по крайней мере единого интерфейса управления питанием нет (или не было в течении весьма продолжительного времени).

Цитата
Цитата

а если учесть что многие современные контроллеры не являются IDE/ATA-совместимыми
Ситуация прямо противополжная.

В каком смысле? Используется стандартный IDE-порт? К сожалению даже тут никто и ничего не обещает. 

Взять к примеру IDE-контроллер, подключаемый посредством USB (или как его неграмотно называют "переходник USB-IDE"). С точки зрения системы он ничем не хуже привычного PCI-ного контроллера, но что из стандартного набора ATA-команд он там у себя внутри реализует, а что нет -- неизвестно, и это полностью лежит на совести производителя (или драйверописателя). Более того, я могу сказать что имеющийся у меня такой контроллер команду spindown не поддерживает. Вот и выходит: вроде и IDE/ATA, но не совсем.

Цитата
Использование прямого доступа к портам жесткого диска очень опасно!

Кто ж спорит?

Цитата
Нужно использовать API, если не хотите разрушить файловую систему.

API -- это и есть DeviceIOControl, так что или-или...
PM MAIL   Вверх
AndreyRus
Дата 11.6.2007, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 18.3.2006

Репутация: нет
Всего: нет



Цитата
API -- это и есть DeviceIOControl, так что или-или...

Под API я имел функцию отличную от DeviceIOControl.

Это сообщение отредактировал(а) AndreyRus - 11.6.2007, 18:37
PM MAIL   Вверх
AndreyRus
Дата 14.6.2007, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 18.3.2006

Репутация: нет
Всего: нет



DeviceIOControl в купе с недокументированным кодом (2000, XP, XP SP1) и документированным (XP SP2, 2003, Vista) позволяет отправлять жесткому диску прямые ATA команды и соответственно проблем с остановкой двигателя нет. Проблема заключается в том, что в некоторых драйверах, вследствие их ущербности (nVidia, внешние контроллеры (S)ATA) такая возможность не реализована.
PM MAIL   Вверх
misha_mike
Дата 15.6.2007, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 1.6.2007

Репутация: нет
Всего: 1



Что я и говорил в своих постах от 11.6.2007, 16:23 и 11.6.2007, 13:55....

Приведенные там же три ассемблерных строчки делают то же самое, но в обход драйвера. При этом все равно не факт что сам котроллер (как железяка) поймет эту команду и отсановит диск.
PM MAIL   Вверх
AndreyRus
Дата 16.6.2007, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 18.3.2006

Репутация: нет
Всего: нет



Цитата(misha_mike @ 15.6.2007,  13:40)
При этом все равно не факт что сам котроллер (как железяка) поймет эту команду и отсановит диск.

Стандартые команды ATA еще никто не отменил. Отключить ими двигатель легко и можно проктически на каждом винте без проблем.
PM MAIL   Вверх
misha_mike
Дата 16.6.2007, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 1.6.2007

Репутация: нет
Всего: 1



Цитата(AndreyRus @ 16.6.2007,  14:32)
Цитата(misha_mike @ 15.6.2007,  13:40)
При этом все равно не факт что сам котроллер (как железяка) поймет эту команду и отсановит диск.

Стандартые команды ATA еще никто не отменил. Отключить ими двигатель легко и можно проктически на каждом винте без проблем.

Правильно, и единственный гарантированный способ донести команду до контроллеа -- записать ее в соответсвующий порт. Я уже привел пример того, как IDE-контроллер не пропускает вполне стандартную и никем не отмененную ATA-команду, посланную средствами API. Если такое себе позволяет один, то чем другие "хуже"?

Эра "стандартных команд" железа уходит, теперь драйвер -- царь и бог. А от железки требуется только поддержка самых базовых стандартных команд, чтобы ОС загрузилась (а если она интегрирована в материнку, то часто и этого не нужно). Если даже видеокарты не утруждают себя полноценной поддержкой VESA, то что говорить про другие девайсы.
PM MAIL   Вверх
AndreyRus
Дата 17.6.2007, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 18.3.2006

Репутация: нет
Всего: нет



Цитата(misha_mike @  16.6.2007,  21:46 Найти цитируемый пост)
Я уже привел пример того, как IDE-контроллер не пропускает вполне стандартную и никем не отмененную ATA-команду, посланную средствами API.
Не контроллер, а драйвер! Контроллер по большому счету просто порт и ему без разницы, что в него шлют.

Знает ли кто-нибудь как отправить IRP'ы - IRP_MJ_POWER, IRP_MN_SET_POWER без использования драйвера?

PM MAIL   Вверх
misha_mike
Дата 17.6.2007, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 1.6.2007

Репутация: нет
Всего: 1



Цитата
Цитата(misha_mike @  16.6.2007,  21:46 Найти цитируемый пост)
Я уже привел пример того, как IDE-контроллер не пропускает вполне стандартную и никем не отмененную ATA-команду, посланную средствами API.
Не контроллер, а драйвер! Контроллер по большому счету просто порт и ему без разницы, что в него шлют.

Контроллер -- это железка, а железки разные бывают. И некоторым из них стандартные порты по боку, у них свои диапазоны ввода-вывода, известные только драйверу.

Цитата
Знает ли кто-нибудь как отправить IRP'ы - IRP_MJ_POWER, IRP_MN_SET_POWER без использования драйвера?

Так IRP -- это как бы неотъемлемая часть именно взаимодействия с драйвером, на нем же она и заканчивается. Так что ИМХО само понятие "IRP в обход драйвера" лишено какого-либо смысла (примерно как вывод изображения в обход видеокарты).
PM MAIL   Вверх
AndreyRus
Дата 17.6.2007, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 18.3.2006

Репутация: нет
Всего: нет



Цитата(misha_mike @  17.6.2007,  14:55 Найти цитируемый пост)
Контроллер -- это железка, а железки разные бывают. И некоторым из них стандартные порты по боку, у них свои диапазоны ввода-вывода, известные только драйверу.
Порты да, бываю разные, но ведь вы говорили о ATA командах. smile 

PM MAIL   Вверх
misha_mike
Дата 18.6.2007, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 1.6.2007

Репутация: нет
Всего: 1



Так что такое в конце концов ATA-команда? Это некий байт, отправляемый в некий порт. И если наш контроллер просто физически не слушает этот порт/байт (или никто, включая драйвер, не знает какой порт/байт он слушает на предмет такой команды), то можно говорить что данную ATA-команду он не поддерживает, как не поддерживает spindown мой USB-контроллер на базе GL811...

Это сообщение отредактировал(а) misha_mike - 18.6.2007, 10:13
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0587 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.