Fil писал(а):Тогда параллельный вопрос: как заблочить сидюк или дивидюк? Надеюсь, они ещё не устарели
Declare Function DeviceIoControl Lib "kernel32" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, lpOverlapped As Any) As Long
Fil писал(а):Тогда параллельный вопрос: как заблочить сидюк или дивидюк? Надеюсь, они ещё не устарели
Fil писал(а):Интересный факт - если зажечь лампочку в флоппике, то чтение, как и запись невозможны. Однако, как это сделать в Виндовсе ИксПи? Можно, если кто знает - и через Ассемблер на аппаратном уровне.
RayShade писал(а):Топику - огромный LOL.
Fil писал(а):alibek
Драйвер не подходит и не обязательно так кидаться в крайности, что если аппаратный уровень - так сразу - драйвер. Можно же просто встроить код Ассемблера.
Хакер писал(а):
- Код: Выделить всё
Declare Function DeviceIoControl Lib "kernel32" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, lpOverlapped As Any) As Long
ANDLL писал(а):Хакер писал(а):
- Код: Выделить всё
Declare Function DeviceIoControl Lib "kernel32" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, lpOverlapped As Any) As Long
А это вообще каким местом тут? Вы слышали про эту API? Очень приятно. А что если я опубликую здесь все API, про которые я что либо слышал?
Fil писал(а):И как мне в этих параметрах разбираться? Одна деклара мало чего мне дает. Я ее и в книге видел, да в лом было разьираться...
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 TForm1.Button1Click(Sender: TObject);
var
LHandle: THandle;
BytesReturned: Cardinal;
MsgBuf: PChar;
FSCTL_LOCK_VOLUME: Integer;
begin
FSCTL_LOCK_VOLUME := CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6,
METHOD_BUFFERED, FILE_ANY_ACCESS);
LHandle := CreateFile('\\.\A:', 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
ShowMessage('Дисковод заблокирован. Нажмите ОК для разблокирования.')
else
begin
if FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER or
FORMAT_MESSAGE_FROM_SYSTEM, nil, GetLastError(), 0, @MsgBuf, 0, nil) > 0 then
begin
ShowMessage('Ошибка DeviceIOControl: ' + MsgBuf);
LocalFree(Cardinal(MsgBuf));
end
else
ShowMessage('Ошибка при вызове DeviceIOControl!');
end;
CloseHandle(LHandle);
end
else
ShowMessage('Ошибка при вызове CreateFile!');
end;
Option Explicit
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Sub Form_Load()
Dim hFile As Long
hFile = CreateFile("\\.\A:", &H80000000, 0, 0, 3, 0, 0)
MsgBox "Нажмите 'OK' что бы разблокировать дисковод"
CloseHandle hFile
End
End Sub
Ну неужели не у кого не хватило ума просто прочитать ВНИМАТЕЛЬНО все посты этого топика?????
эээ
Совсем нет
может этим людям посидеть на форумах по другим языкам?
Сейчас этот форум просматривают: Google-бот и гости: 26