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

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

spindown by DeviceIoControl [Win2k, WinXP]


Страницы:   1 2

kernel ©   (2007-11-05 17:16:00) 

Доброго времени суток, уважаемые Delphi-кодеры :)
Необходимо остановить шпиндель жесткого диска с помощью DeviceIoControl. Прыгать в нулевое кольцо и посылать там в порт $0E6 не хочется, тем более вся программа построена на DeviceIoControl.

Думал, все обойдется посылкой $0E6 в регистр "command", дык не получается :: сложилось впечатление, что винту из-под DeviceIoControl можно посылать ограниченное число команд.

На десерт неработающий кусок кода:

SCIP_PM.cBufferSize:=0;
SCIP_PM.irDriveRegs.bFeaturesReg:=0;
SCIP_PM.irDriveRegs.bSectorCountReg:=0;
SCIP_PM.irDriveRegs.bSectorNumberReg:=0;
SCIP_PM.irDriveRegs.bCylLowReg:=0;
SCIP_PM.irDriveRegs.bCylHighReg:=0;
SCIP_PM.irDriveRegs.bDriveHeadReg:=$E0;//пробовал $A0 or ((DRVNUM and 1) shl 4);
SCIP_PM.irDriveRegs.bCommandReg:=$E6;
SCIP_PM.bDriveNumber:=DRVNUM;
if not DeviceIoControl(hSMARTIOCTL[DRVNUM], DFP_SEND_DRIVE_COMMAND,
@SCIP_PM, sizeof(TSENDCMDINPARAMS)-1, @SCOP_PM[DRVNUM],
 sizeof(TSENDCMDOUTPARAMS)-1 + SCIP_PM.cBufferSize, c, nil) then showmessage(PChar('Message: '+SysErrorMessage(GetLastError)+
   ' | Code: '+IntToStr(GetLastError)));


Всем заранее спасибо :)


kernel   (2007-12-11 15:45:00) [1]

...
Контроллер:
Standard Dual Channel PCI IDE Controller
Ревизия - F2

Файлы драйверов:
c:\windows\system32\drivers\disk.sys (5.1.2600.2180)
c:\windows\system32\drivers\atapi.sys (5.1.2600.2180)
c:\windows\system32\storprop.dll (5.1.2600.2180)
c:\windows\system32\drivers\pciidex.sys (5.1.2600.2180)
c:\windows\system32\drivers\pciide.sys (5.1.2600.0)


Хм, теперь понял. У меня установлено NVidia nForce4 Sata Controllerи Standard Dual Channel PCI IDE Controllerвместе. У nForce4 Sata используется nvata.sys. Но как оказалось, программы работают от Standard Dual Channel PCI IDE Controller. Теперь все встало на свои места :)


Andrey_rus   (2007-12-10 21:09:00) [2]

> Только что-то Касперский на него ругаться начал...
Это проактивная защита, которая носит лишь вероятностный характер. Не беспокойтесь, я знаяю ребят пишущих эту программу - это не те люди. Хотя, конечно, решать Вам.


> После нажатия тюнинг появился - Эта функциональность заблокирована
> в этой версии программы.

Если хотите - можно и разблокировать. :)


Andrey_rus   (2007-12-10 20:58:00) [3]


> После нажатия тюнинг появился - Эта функциональность заблокирована в этой версии программы.

Следовательно, программа может осуществлять прямой доступ к накопителю при установленных у вас драйверах контроллера ATA.
Нажмите на кнопку "режим эксперта" и скопируйте сюда список файлов драйвера с их версиями.


kernel   (2007-12-10 20:00:00) [4]


> Мистика... Скачай небольшую прогу (46кб) - http://www.smarthdd.
> com/rus/SMARTHDD.exe и нажми на кнопку тюнинг. Программа
> говорит - тюнинг блокируется драйвером? Какая у тебя OS?

OS у меня WinXP (SP2)

Запустился "Волшебный диск". Вот что пишет:

Торговая марка - Hitachi
Модель - Hitachi HDS721616PLA380
Серийный номер - PVB300D2R7K0BD
Емкость - 153.3 Гб
Логические диски - C: D:
Среднее время доступа - 19.1 мс
Средняя скорость чтения - 74 Мб/с
Текущая температура - 38 °C
Наивысшая температура - 38 °C
Подключений к питанию - 1277
Отработано часов - ?
Состояние - исправен
Начало анализа - 10.12.2007


После нажатия тюнинг появился MessageBox:

---------------------------
Волшебный диск :: Информация
---------------------------
Эта функциональность заблокирована в этой версии программы.

Хотите разблокировать?
---------------------------
Да   Нет  
---------------------------


Только что-то Касперский на него ругаться начал...


Andrey_rus   (2007-12-09 09:33:00) [5]


> Проверял на NVIDIA nForce 4 с драйвером NVIDIA SW (nvata.sys) - все отлично работало.


Мистика... Скачай небольшую прогу (46кб) - http://www.smarthdd.com/rus/SMARTHDD.exeи нажми на кнопку тюнинг. Программа говорит - тюнинг блокируется драйвером? Какая у тебя OS?


kernel   (2007-11-09 08:07:00) [6]


> Существует... Это драйвер... :) И делай в нем что хошь!


Эх... Если бы я сразу начал делать через драйвер, а сейчас, когда все приложение построено на DeviceIOControl, уже поздно... :(


Dimaxx   (2007-11-09 01:09:00) [7]

Существует... Это драйвер... :) И делай в нем что хошь!


kernel   (2007-11-08 13:55:00) [8]

У себя на SATA проверял - работает нормально :)

Может быть существует более универсальный аналог IOCTL_ATA(SCSI)_PASS_THROUGH?


Dimaxx   (2007-11-08 13:01:00) [9]

Самое интересное, что на JMicron'е висел еще привод DVD. И его модель нормально получалась. А вот при обращении к IDE-винту выдавал ошибку. Поставил дефолтный драйвер - все заработало.


Dimaxx   (2007-11-08 12:58:00) [10]

Угу. На SATA винтах работает (давно мучал - не помню какую юзал команду - IDE или SCSI), а вот на внешних IDE-контроллерах работает только если драйвер стоит дефолтный.


kernel   (2007-11-08 11:38:00) [11]


> Но если не работает с IDE, то со SCSI должно работать. А
> не работает... :D


IOCTL_SCSI_PASS_THROUGH ?


Dimaxx   (2007-11-08 10:13:00) [12]

Но если не работает с IDE, то со SCSI должно работать. А не работает... :D


kernel   (2007-11-08 09:40:00) [13]


> Мистика. Дело в том, что IOCTL_IDE_PASS_THROUGH недокументированная
> возможность стандартных драйверов и она не реализованна
> у разработчиков третьих фирм.


Вероятно, зависит от версии драйверов (по крайней мере у NVIDIA). Натыкался в интернете - на форуме каком-то писали, что на nForce 2 с драйверами какой-то версии работало, а с более старыми драйверами - нет. Видимо, как разработчики дров реализуют совместимость со стандартным ATA драйвером, так и будет IOCTL_IDE_PASS_THROUGH работать :)


Dimaxx   (2007-11-07 20:28:00) [14]

Значит кто-то их реализует, а кто-то нет... :)


Andrey_rus   (2007-11-07 20:13:00) [15]


> Проверял на NVIDIA nForce 4 с драйвером NVIDIA SW (nvata.
> sys) - все отлично работало.


Мистика. Дело в том, что IOCTL_IDE_PASS_THROUGH недокументированная возможность стандартных драйверов и она не реализованна у разработчиков третьих фирм.


kernel   (2007-11-07 19:41:00) [16]


> Драйвера такие?
>
> disk.sys
> nvata.sys
> idecoi.dll
> idecoiins.dll
> nvcoi.dll
>
> или такие?
>
> disk.sys
> atapi.sys
> storprop.dl
> intelide.sys
> pciidex.sys


Проверял на NVIDIA nForce 430B (6150) со стандартным ATA-драйвером - все отлично работало.
Проверял на NVIDIA nForce 4 с драйвером NVIDIA SW(nvata.sys) - все отлично работало.


> Я ж сказал, что не та команда. Ты послал в sleep-режим накопитель.
>  Прочитай в [4] что написано про команду $E6.


Дык мне и нужно его в слип ставить, чтобы при первом доступе он не завелся. Для запуска (после $e6) пойдут только команды Recalibrate ($10-$1F).

В общем, решение проблемы с запуском ([17]) :: использовать $10 (или любой другой до $1F) вместо $E6
:)


Dimaxx   (2007-11-07 18:54:00) [17]


> теперь не знаю как его снова запустить :(

Я ж сказал, что не та команда. Ты послал в sleep-режим накопитель. Прочитай в [4] что написано про команду $E6.


Andrey_rus   (2007-11-07 18:26:00) [18]


> проверял на NVIDIA nForce 430B (6150)  -  все нормально


Драйвера такие?

disk.sys
nvata.sys
idecoi.dll
idecoiins.dll
nvcoi.dll


или такие?

disk.sys
atapi.sys
storprop.dl
intelide.sys
pciidex.sys


kernel   (2007-11-07 15:05:00) [19]


> tesseract ©   (07.11.07 14:41) [18]
> > теперь не знаю как его снова запустить :(Молодец.

?


tesseract   (2007-11-07 14:41:00) [20]


> теперь не знаю как его снова запустить :(


Молодец.


Страницы:   1 2

Наверх

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