![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
spindown by DeviceIoControl [Win2k, WinXP]
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]
> теперь не знаю как его снова запустить :(
Молодец.