Текущий архив: 2005.09.18;
Скачать: CL | DM;
Вниз
Отключение дисков Найти похожие ветки
← →
Работник (2005-07-26 10:54) [0]Привет. Вопрос в следущем, мне необходимо отключать диски (дисководы, флешки и т.п.)программно. Нашел для этого соответсвующий код, примерно такой:
var
LHandle: THandle;
BytesReturned: Cardinal;
MsgBuf: PChar;
FSCTL_LOCK_VOLUME: Integer;
Disk_s: string;
const
FILE_DEVICE_FILE_SYSTEM: Integer = $00000009;
METHOD_BUFFERED: Integer = $00000000;
FILE_ANY_ACCESS: Integer = $00000000;
function CTL_CODE(DeviceType, FunctionNo, Method, Access: Integer): Integer;
begin
Result := (DeviceType shl 16) or (Access shl 14) or (FunctionNo shl 2) or (Method);
end;
procedure CloseDisk;
begin
//Äàëåå áëîêèðóåì ðàáîòó óñòðîéñòâ
FSCTL_LOCK_VOLUME := CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6,
METHOD_BUFFERED, FILE_ANY_ACCESS);
LHandle := CreateFile(Pchar(Disk_s), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ
or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or
FILE_FLAG_DELETE_ON_CLOSE, 0);
if LHandle <> 0 then
begin
if DeviceIOControl(LHandle, FSCTL_LOCK_VOLUME, nil, 0, nil, 0, BytesReturned, nil) then
i:=0;
end;
Все нормально работает если пытаемся отключить 1 диск, при передачи попытке отключить 2-й диск, никакого эффекта.
Disk_s:="\\.\a: .
Код не мой(я его тока слегка изменил), нашел в инете, так что слабо представляю, что какая переменная значит. Может кто подскажет как программно отключить 2-а и более диска,(плохо же писать для каждого диска отдельную процедуру)
← →
Масяня © (2005-07-26 11:28) [1]А ты сохрани код в dll"файле а потом загружай его для каждого диска
P.S.
Если у меня вдруг все слова слились в одно - то у меня просто браузер не умеет делать пробелы:(
← →
kblc © (2005-07-26 11:33) [2]Если я правильно тебя понял, возьми свой код и поменяй в нём
procedure CloseDisk;
наprocedure CloseDisk(const Disk_s: string);
, а потом используй так:CloseDisk("\\.\D:");
CloseDisk("\\.\E:");
Если я не правт, то уточню: какие диски именно ты хочешь отключить? может их просто нельзя отключить из-за "нужды" системы?
← →
Работник (2005-07-26 11:35) [3]А все работает и так, просто оказываеться не могу заблокировать USB-DVDRom, надо подумать... А дисководы и флешки с помощью такого кода легко блокирует.
procedure TfmMain.Button1Click(Sender: TObject);
begin
Disk_s:="\\.\a:";
CloseDisk;
Disk_s:="\\.\d:";
CloseDisk;
// и так далее, задача тока сводиться к определению букв дисков
end;
Страницы: 1 вся ветка
Текущий архив: 2005.09.18;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.01 c