![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как можно в вынь2к, ХР закрыть доступ к дисководу??? Есть ли что то для етого в АПИ?? [D5, D6, Win2k, WinXP]
gluka © (2002-02-16 02:47:00)Ну например как это делает DeviceLock!?!?!?!
gluka (2002-02-21 15:47:00) [1]Да большое спасибо, работает!!!
Но чтоб уж до конца дойти то как можно перхватить обращение к дисководу (какое именно)??? Чтоб, к примеру показать свое окно с матюками ...
Очень благодарен!!!
Tosov (2002-02-19 23:39:00) [2]Ihor Osov"yak
Большое спасибо.Все РАБОТАЕТ!!!!
_Tosov_ (2002-02-19 07:26:00) [3]Те CloseHandle разблокирует его?
Попробую дома проверить.
Ihor Osov'yak (2002-02-19 02:35:00) [4]Tosovу:
const
FSCTL_LOCK_VOLUME = 589848;
FSCTL_UNLOCK_VOLUME = 589852;
var
fHandle:THandle;
cbReturn:Cardinal;
begin
fHandle:=CreateFile("\\.\A:",GENERIC_ALL, FILE_SHARE_READ or FILE_SHARE_WRITE,
nil, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if fHandle=0 then WriteLN("fHandle == 0");
if not DeviceIoControl(fHandle,FSCTL_LOCK_VOLUME,nil, 0, nil, 0,cbReturn,nil)
then WriteLN("Device Control Error")
else begin
write("FDD is locked .. Press Enter to unlock ...");
readln;
end;
CloseHandle(fHandle);
WriteLN("End of Program");
readln;
end.
после получения
FDD is locked .. Press Enter to unlock ...
и до нажатия enter попытайся чего то с a: сделать - ну прочитать
или записать с любой другой задачи, даже с проводника ...
Tosov (2002-02-19 00:50:00) [5]
const
FSCTL_LOCK_VOLUME = 589848;
FSCTL_UNLOCK_VOLUME = 589852;
var
fHandle:THandle;
cbReturn:Cardinal;
begin
fHandle:=CreateFile("\\.\A:",GENERIC_ALL, FILE_SHARE_READ or FILE_SHARE_WRITE,
nil, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if fHandle=0 then WriteLN("fHandle == 0");
if not DeviceIoControl(fHandle,FSCTL_LOCK_VOLUME,nil, 0, nil, 0,cbReturn,nil)
then WriteLN("Device Control Error");
CloseHandle(fHandle);
WriteLN("End of Program");
readln;
end.
Ошибок нет. Все работает нормально.
А как результат должен выглядеть? Что будет с флопом?
Ihor Osov'yak (2002-02-19 00:24:00) [6]да я не проверенных советов не даю ...
вот, собст-но фрагменты
function OpenVolumeEx(letter: char;dwDesiredAccess, dwShareMode: DWORD):THandle;
begin
result := CreateFile(pchar("\\.\"+letter+":"),
dwDesiredAccess,dwShareMode,
nil, OPEN_EXISTING, 0, 0);
end;
function NT_LockVolumeEx(letter:char):integer;
var hDevice:THandle;
cb: DWORD;
begin
.....
hDevice:=OpenVolumeEx(letter,
GENERIC_READ or GENERIC_Write,
FILE_SHARE_READ or FILE_SHARE_WRITE);
if (hDevice <> INVALID_HANDLE_VALUE) then begin
if not DeviceIoControl(hDevice,
FSCTL_LOCK_VOLUME , nil, 0, nil,0, cb, nil) ....
Tosov (2002-02-19 00:16:00) [7]Ihor Osov"yak
в нашем случае - WinIOCtrl.h, довольно хороший перевод
есть в виде JwaWinIoctl.pas
на delphi-jedi не нашел :-( А 2 сайт не работает (under Construction)
Да мне и не надо весь хедер. Надо всего 2 константы. Достал С++
FSCTL_LOCK_VOLUME = 589848
UNLOCK = 589852
Подставил в прогу - она не работает (хотя ошибок тоже нет)
gluka
А у тебя что-нибудь получилось?
Ihor Osov'yak (2002-02-18 11:06:00) [8]Ну С к этому отношение имеет лишь потому, что MS поставляет сишные хидера для системных вызовов .....
Есть такая вещь, как MSDN ... маст хев, если есть желание работать с системой в той части, которая ms документирована, а не лишь в той, которая борландами в windows.pas втиснута ...
... после нахождения сабжа в MSDN смотрим, где это дело живет
(декларировано), и пытаемся найти соотв. декларацию в делфях. Но - довольно высокая вероятность того, что соотв. вещь в делфях не продекларирована. Тогда ищем в инете, может какая добрая душа соотв. хидер перевела .... Если нет - делаем перевод соотв. фрагмента хидера сами ....
... в нашем случае - WinIOCtrl.h, довольно хороший перевод
есть в виде JwaWinIoctl.pas на
http://delphi-jedi.orgor http://members.chello.nl/m.vanbrakel2
Tosov (2002-02-18 00:35:00) [9]А чему равно это самое FSCTL_LOCK_VOLUME (и FSCTL_UNLOCK_VOLUME) ? Для дельфи это undeclared identifier, а С у меня нет...
Tosov (2002-02-18 00:10:00) [10]Anatoly Podgoretsky
У администратора есть для этого стандартные средства системы
А можно поподробнее о СТАНДАРТНЫХ средствах системы?
Ihor Osov'yak (2002-02-17 22:09:00) [11]Если програмно -
масдай - int 21h, func 440Dh, code 4Ah + юзание VWIN32.VXD
NT - ищи в MSDN вокруг FSCTL_LOCK_VOLUME
Anatoly Podgoretsky (2002-02-16 13:54:00) [12]У администратора есть для этого стандартные средства системы и это не относится к функциям пользователя.