Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.20;
Скачать: CL | DM;

Вниз

Как можно в вынь2к, ХР закрыть доступ к дисководу??? Есть ли что то для етого в АПИ??   Найти похожие ветки 

 
gluka   (2002-02-16 02:47) [0]

Ну например как это делает DeviceLock!?!?!?!


 
Anatoly Podgoretsky   (2002-02-16 13:54) [1]

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


 
Ihor Osov'yak   (2002-02-17 22:09) [2]

Если програмно -
масдай - int 21h, func 440Dh, code 4Ah + юзание VWIN32.VXD
NT - ищи в MSDN вокруг FSCTL_LOCK_VOLUME


 
Tosov   (2002-02-18 00:10) [3]

Anatoly Podgoretsky
У администратора есть для этого стандартные средства системы
А можно поподробнее о СТАНДАРТНЫХ средствах системы?


 
Tosov   (2002-02-18 00:35) [4]

А чему равно это самое FSCTL_LOCK_VOLUME (и FSCTL_UNLOCK_VOLUME) ? Для дельфи это undeclared identifier, а С у меня нет...


 
Ihor Osov'yak   (2002-02-18 11:06) [5]

Ну С к этому отношение имеет лишь потому, что MS поставляет сишные хидера для системных вызовов .....

Есть такая вещь, как MSDN ... маст хев, если есть желание работать с системой в той части, которая ms документирована, а не лишь в той, которая борландами в windows.pas втиснута ...

... после нахождения сабжа в MSDN смотрим, где это дело живет
(декларировано), и пытаемся найти соотв. декларацию в делфях. Но - довольно высокая вероятность того, что соотв. вещь в делфях не продекларирована. Тогда ищем в инете, может какая добрая душа соотв. хидер перевела .... Если нет - делаем перевод соотв. фрагмента хидера сами ....
... в нашем случае - WinIOCtrl.h, довольно хороший перевод
есть в виде JwaWinIoctl.pas на
http://delphi-jedi.org or http://members.chello.nl/m.vanbrakel2





 
Tosov   (2002-02-19 00:16) [6]

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-19 00:24) [7]

да я не проверенных советов не даю ...


вот, собст-но фрагменты


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:50) [8]

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 02:35) [9]

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 07:26) [10]

Те CloseHandle разблокирует его?
Попробую дома проверить.


 
Tosov   (2002-02-19 23:39) [11]

Ihor Osov"yak
Большое спасибо.Все РАБОТАЕТ!!!!


 
gluka   (2002-02-21 15:47) [12]

Да большое спасибо, работает!!!
Но чтоб уж до конца дойти то как можно перхватить обращение к дисководу (какое именно)??? Чтоб, к примеру показать свое окно с матюками ...
Очень благодарен!!!



Страницы: 1 вся ветка

Текущий архив: 2002.05.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
1-64675
Loxly
2002-05-06 07:58
2002.05.20
Положение панели задач


3-64481
Vint
2002-04-15 20:59
2002.05.20
Помогите начинающему разработчику баз данных.


1-64747
3asys
2002-05-07 11:57
2002.05.20
Работа с объектами


1-64645
Riko
2002-05-07 15:33
2002.05.20
Поочередное выполнение функций...


3-64528
Vasilii
2002-04-22 15:44
2002.05.20
проблемы с IBEvents?