Форум: "WinAPI";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];
Внизблокировка FLASH (сьемного накопителя usb ) Найти похожие ветки
← →
user51 (2005-08-26 11:34) [0]как можно програмно отключить включить флашку
(человек вставляет ее она не работет пока не включим)
и можно ли разрешть только чтение а запись включать потом
← →
--=ХР=-- (2005-08-26 11:54) [1]1. Не вставлять
2. На многих флэшках есть банальный железный локер.
← →
Rouse_ © (2005-08-26 12:50) [2]В DDK есть пример драйвер-фильтра. Блокируй обращение к устройству через него.
← →
КодеКорешь (2005-08-26 18:01) [3]DeviceIoControl
см пример по извлечению носителя из CDROM
← →
user51 (2005-09-07 15:47) [4]DeviceIoControl не 100% срабатывает - если открыт хоть один файл на флашке то не сработает. Также иногда не срабатывает даже когда я на своем компе делаю причем вообще необращаюсь к флашке (Ошибка DeviceIOControl)
Моя прога отлавливает то что вставили флашку ждет пока система присвоит букву потом использует DeviceIoControl
Здесь кто кого обгонит человек который вставил флашку и успел ее выбрать или моя прога. Хотя может я не правильно использую DeviceIoControl можно ли примерчик или вообще принципиально что нибудь другое (мыль у меня при получении сообщения что флашку вставили послать ложное сообщение что ее вынули. может кто поможет в этом направлении)
мой код
ch -буква которую присвоила система
number_flash- номер флашки если вставили более 1
LHandle :array [1..5] of THandle;
BytesReturned :array [1..5] of Cardinal;
MsgBuf :array [1..5] of PChar;
FSCTL_LOCK_VOLUME1 :array [1..5] of Integer;
procedure TFfake.lock_flash(ch:char;number_flash:integer);
const
FILE_DEVICE_FILE_SYSTEM: Integer = $00000009;
METHOD_BUFFERED: Integer = $00000000;
FILE_ANY_ACCESS: Integer = $00000000;
begin
FSCTL_LOCK_VOLUME1[number_flash] := CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6,METHOD_BUFFERED, FILE_ANY_ACCESS);
LHandle[number_flash] := CreateFile(pchar("\\.\"+ch+":"), 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[number_flash] <> 0 then
begin
if DeviceIOControl(LHandle[number_flash], FSCTL_LOCK_VOLUME1[number_flash], nil, 0, nil, 0, BytesReturned[number_flash], nil) then
RxRichEdit2.Lines.add("ДИСК " +ch+": ЗАБЛОКИРОВАН")
else
begin
if FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER or
FORMAT_MESSAGE_FROM_SYSTEM, nil, GetLastError(), 0, @MsgBuf[number_flash], 0, nil) > 0 then
begin
RxRichEdit2.Lines.add(ch+": Ошибка DeviceIOControl: " + MsgBuf[number_flash]);
LocalFree(Cardinal(MsgBuf[number_flash]));
end
else
RxRichEdit2.Lines.add(ch+": Ошибка при вызове DeviceIOControl!");
end;
// CloseHandle(LHandle[number_flash]); я убрал вызывается в другой процедуре
end
else
RxRichEdit2.Lines.add(ch+": Ошибка при вызове CreateFile!");
end;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.039 c