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

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

Как можно в вынь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]

У администратора есть для этого стандартные средства системы и это не относится к функциям пользователя.


Наверх

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