![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Enable disk / Disable disk в Device Manager. HELP!! [D7, WinXP]
незнайка © (2004-01-16 12:05:00)В Device Manager есть функция Enable/Disable, которую можно применить к разным устройствам и дискам. Диски и интересуют. Как программным путем можно отключить диск (аналог mount/Unmount в юниксе)
maxx0 (2004-01-21 10:18:00) [21]DeleteVolumeMountPointW
FindFirstVolumeMountPoint
FindNextVolumeMountPoint
FindVolumeMountPointClose
незнайка (2004-01-20 16:11:00) [22]Кто-нибудь работал с функцией NtSetInformationObjectиз NtDll?
Она устанавливает атрибуты объектов. Нужно описание этих
атрибутов. Возможно , что среди них могут оказаться и
Disable/Enable.
незнайка (2004-01-19 13:49:00) [23]Нашел, где есть исходники DevCon: You can find the DevCon source files in the WINDDK\version\src\setup\devcon directory
Если есть у кого-нибудь скиньте на мыло pls..
AlexKniga (2004-01-18 12:36:00) [24]Vit@ly
Ты отключишь показ логдисков в проводнике. В любом другом файл манегере они доступны.
Физдиски отключаются (как уже сказали) devcon.
Незнайка (2004-01-17 16:10:00) [25]ты не понял.. мне не нужно скрывать диски... мне нужно отключить ФИЗИЧЕСКИЙ ДИСК как устройство...
Vit@ly (2004-01-17 10:37:00) [26]Если ты правильно понял, то диски не видны после перегруза компа! Я скомпилил прогу которая позволяет скрывать и показавать диски. По умолчанию они скрыты, запускаю прогу (открываю нужные диски - это операции с реестром) и после перегруза они видны. Это когда именно мне необходимо с этими дисками работать, а не обычным пользователям (компьютерный класс)
Незнайка (2004-01-17 10:21:00) [27]Спасибо, но это не совсем то.. в этом случае win все так же продолжает видеть сам диск...
Vit@ly (2004-01-17 10:13:00) [28]> хм.. и все же.. как отключить диск, чтоб он перестал видtться системой?
Переведешь надеюсь сам
A driver's value is twice value than preceding driver value.
These are A = 1 , B = 2 , C = 4 , D = 8 , E = 16 ....and others.
For example;
if you want to hide drive C and drive E, then you would add 4 and 16.
Result; 4 + 16 = 20 and Called like so ; HideDriver(20);
uses Registry;
procedure HideDriver(HideNumber: integer);
var Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
with Reg do
begin
RootKey := HKEY_CURRENT_USER;
OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\Explorer', True);
WriteInteger('NoDrives', HideNumber);
CloseKey;
RootKey := HKEY_LOCAL_MACHINE;
OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\Explorer', True);
WriteInteger('NoDrives', HideNumber);
CloseKey;
end;
finally
Reg.Free;
end;
end;
To visible drivers in "My Computer" then adding this code to the OnClick event of the button and then please restart windows.
var Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
with Reg do
begin
RootKey := HKEY_CURRENT_USER;
OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\Explorer', True);
DeleteValue('NoDrives');
CloseKey;
RootKey := HKEY_LOCAL_MACHINE;
OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\Explorer', True);
DeleteValue('NoDrives');
CloseKey;
end;
finally
Reg.Free;
end;
end;
Успехов
Незнайка (2004-01-17 09:22:00) [29]ВО. спасибо.. попробую... :) давно я этим не занимался :)
Alex Konshin (2004-01-17 08:18:00) [30]devcon нашелся у меня только в IFS, исходников не оказалось.
В Win2K DDK его нет. Может он есть в новом DDK, но его у меня нет (да и не нужен).
http://home.earthlink.net/~akonshin/files/devcon.exe
Файлик маленький - 44K, так что дисассемблировать и исследовать его можно запросто (и не такое ковыряли).
Alex Konshin (2004-01-16 23:29:00) [31]Нет, чтоб найти девайс, нужно его перед этим и удалить. А этого-то мы делать и не умеем...
Ладно, посмотрю дома в DDK.
Alex Konshin (2004-01-16 23:17:00) [32]
>Ты не пробовал перезагружаться с двумя идентичными дисками? >Какой эффект?
Пробовал.. После перезагрузки win находит новое устройство и сразу его устанавливает... какое - не говорит.. и после этого все нормально работает...
Так, может, тогда имеет смысл попробовать это http://msdn.microsoft.com/library/en-us/storage/hh/storage/k307_23ea.aspили http://msdn.microsoft.com/library/en-us/storage/hh/storage/k307_5v3m.asp
Незнайка (2004-01-16 22:59:00) [33]Alex Konshin:
Такое ощущение, что ты пишешь свой Ghost.
хм.. ну можно и так сказать.. с некоторыми дополнениями..
Может, дело и не в том, что ты не резервировал.
У тебя получаются два идентичных дисков с одной сигнатурой.
Так и получается..
Может, тома тоже имеют уникальные идентификаторы (кажется так
и есть),
Так и есть...
Ты не пробовал перезагружаться с двумя идентичными дисками? Какой эффект?
Пробовал.. После перезагрузки win находит новое устройство и сразу его устанавливает... какое - не говорит.. и после этого все нормально работает...
Alex Konshin (2004-01-16 22:42:00) [34]IOCTL_STORAGE_RESERVE - эта команда на scsi не проходит. Сегодня уже пробовал... у меня выдает ошибку..
Хм. Как раз-таки на SCSI оно должно работать. Сомнительно, что оно работает на IDE.
Alex Konshin (2004-01-16 22:39:00) [35]Дело вот в чем.. это продолжение предыдущей задачи..
Это я догадался.
Такое ощущение, что ты пишешь свой Ghost.
НО.. если эти сектора я снимаю с диска и тут же пишу на другой и после окончания работы даю команду IOCTL_DISK_UPDATE_PROPERTIES, то система вываливается в синий экран..
Может, дело и не в том, что ты не резервировал.
У тебя получаются два идентичных дисков с одной сигнатурой. Вообще-то, как я понимаю, присутствие сигнаутуры не обязательно.
Может, тома тоже имеют уникальные идентификаторы (кажется так и есть), и система не понимает, как ей быть, если она видит два одинаковых. Ты не пробовал перезагружаться с двумя идентичными дисками? Какой эффект?
Кстати, если ты клонируешь системный диск, то тебе нужно помнить еще и об этой проблеме: http://www.sysinternals.com/ntw2k/source/newsid.shtml
Незнайка (2004-01-16 22:15:00) [36]Alex Konshin:Вот то, что делает эта команда (Devcon) судя по всему то, что нужно... но исходники , конечно, предпочтительней :). Дело вот в чем.. это продолжение предыдущей задачи.. после того, как я записал сектора на диск (и в это время к системе не подключен тот диск с которого я снимал эти сектора, то кеш нормально читается по новой и все ok.. НО.. если эти сектора я снимаю с диска и тут же пишу на другой и после окончания работы даю команду IOCTL_DISK_UPDATE_PROPERTIES, то система вываливается в синий экран.. судя по всему win не может разобраться с присутствием одновременно совершенно идентичных дисков в системе.. поэтому и возникла идея перед командой обновления кеша отключить тот диск, с которого сектора взяты.
IOCTL_STORAGE_RESERVE- эта команда на scsi не проходит. Сегодня уже пробовал... у меня выдает ошибку..
М-да.. тоже посмотрел... две команды IOCTL_ATA_ задокументировали :)
Alex Konshin (2004-01-16 21:31:00) [37]IRP_MN_STOP_DEVICE и т.п. тебе точно не поможет - это не тот уровень.
Нужно сделать что-то типа того, что делает эта команда:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ddtools/hh/ddtools/devcon_34vn.asp
Можешь попробовать его поисследовать и дисассемблировать :-)
Хотя вполне возможно, что в DDK есть его исходники. Дойду до дома - посмотрю.
Может, тебе будет просто достаточно зарезервировать устройство (если это работает для IDE)? http://msdn.microsoft.com/library/en-us/storage/hh/storage/k307_6p0y.asp
PS: Я тут мимоходом обнаружил, что теперь команды вроде IOCTL_ATA_PASS_THROUGH задокументированы. Хм, получается, что теперь можно читать-писать напрямую.
N169 (2004-01-16 17:45:00) [38]Может, Setup API поможет? (группа ф-й, имена которых начинаются с SetupDi....)
незнайка (2004-01-16 16:29:00) [39]Нашел несколько запросов к драйверу: IRP_MN_STOP_DEVICE, IRP_MN_REMOVE_DEVICEи т.п.. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/kmarch/hh/kmarch/pnp-irps_4noy.asp
Но.. ни кодов, ни где они описанны, ничего.. может кто знает?
незнайка (2004-01-16 16:06:00) [40]Kerk:Нет, думаю, что это не пройдет.. нужен именно аналог Disable (когда выключаешь его в ручную)
Styx:Нужно отключить диск полностью, чтоб все кеши очистились полностью... система не должна видеть этот диск вообще..