Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > TDriver - как юзать???


Автор: gonzales 7.6.2006, 14:17
кто нить пользовал компонент - TDriver?
не могу разобраться как подключать свой драйвер и как читать из Регистра устройства

 

Автор: Yanis 7.6.2006, 14:19
Цитата(gonzales @  7.6.2006,  15:17 Найти цитируемый пост)
кто нить пользовал компонент - TDriver?
не могу разобраться как подключать свой драйвер и как читать из Регистра устройства

А автору не пробовал написать? Иногда помогает... 

Автор: Snowy 7.6.2006, 14:26
http://forum.vingrad.ru/index.php?act=Search&CODE=show&searchid=de00245c1e0a386e625ed1efc56110a3&search_in=posts&result_type=topics&flag=search&debug=&highlite=tdriver&skipped= 

Автор: gonzales 7.6.2006, 14:53
автору уже написал,
поиском тоже прошелся, видать я первыйsmile 

Автор: Romikgy 7.6.2006, 15:30
Цитата(gonzales @  7.6.2006,  13:17 Найти цитируемый пост)
как подключать свой драйвер

какой свой драйвер?
Цитата(gonzales @  7.6.2006,  13:17 Найти цитируемый пост)
 как читать из Регистра устройства

Код

Далее типо так: 
код Pascal/Delphi    
1:    
2:    
3:    
4:    
5:    
6:    
7:    
 Driver1.SetPort($50,$70,true);    
 //while (Driver1.PortInOut[$64] and 2 <> 0) do;    
 Driver1.PortInOut[$60]:=$ed;    
 {0бит - включить светодиод Scroll Lock;    
  1бит - включить светодиод Num Lock;    
  2бит - включить светодиод Caps Lock;}    
 Driver1.PortInOut[$60]:=$2; //включаем Num Lock    


PS: Не проверял...

http://forum.vingrad.ru/index.php?showtopic=91032&hl=tdriver
Код

1. Вообще-то в TDriver-е енто написано... что делает ента функция.PS: Модифицируется карта разрешения ввода-вывода.
  

Автор: gonzales 7.6.2006, 18:15
а вот еще вопрос в тему,
есть функция DeviceIOControl(hDriver,$9C406408,@inBuffer,4,@outBuffer,4,BytesReturned,nil)

что есть в ней второй параметр? 

Автор: Yanis 7.6.2006, 18:59
Цитата(gonzales @  7.6.2006,  19:15 Найти цитируемый пост)
что есть в ней второй параметр?

В справку заглядывал? Так нехочется цитировать справку....
Цитата
dwIoControlCode

Specifies the control code for the operation. This value identifies the specific operation to be performed and the type of device on which the operation is to be performed. The following values are defined: 

Value    Meaning
FSCTL_DISMOUNT_VOLUME    Dismounts a volume.
FSCTL_GET_COMPRESSION    Obtains the compression state of a file or directory
FSCTL_LOCK_VOLUME    Locks a volume.
FSCTL_READ_COMPRESSION    Reserved for future use.
FSCTL_SET_COMPRESSION    Sets the compression state of a file or directory.
FSCTL_UNLOCK_VOLUME    Unlocks a volume.
FSCTL_WRITE_COMPRESSION    Reserved for future use.
IOCTL_DISK_CHECK_VERIFY    Obsolete. Use IOCTL_STORAGE_CHECK_VERIFY
IOCTL_DISK_EJECT_MEDIA    Obsolete. Use IOCTL_STORAGE_EJECT_MEDIA
IOCTL_DISK_FORMAT_TRACKS    Formats a contiguous set of disk tracks.
IOCTL_DISK_GET_DRIVE_GEOMETRY    Obtains information on the physical disk's geometry.
IOCTL_DISK_GET_DRIVE_LAYOUT    Provides information about each partition on a disk.
IOCTL_DISK_GET_MEDIA_TYPES    Obsolete. Use IOCTL_STORAGE_GET_MEDIA_TYPES
IOCTL_DISK_GET_PARTITION_INFO    Obtains disk partition information.
IOCTL_DISK_LOAD_MEDIA    Obsolete. Use IOCTL_STORAGE_LOAD_MEDIA
IOCTL_DISK_MEDIA_REMOVAL    Obsolete. Use IOCTL_STORAGE_MEDIA_REMOVAL
IOCTL_DISK_PERFORMANCE    Provides disk performance information.
IOCTL_DISK_REASSIGN_BLOCKS    Maps disk blocks to spare-block pool.
IOCTL_DISK_SET_DRIVE_LAYOUT    Partitions a disk.
IOCTL_DISK_SET_PARTITION_INFO    Sets the disk partition type.
IOCTL_DISK_VERIFY    Performs logical format of a disk extent.
IOCTL_SERIAL_LSRMST_INSERT    Enables or disables placement of a line and modem status data into the data stream.
IOCTL_STORAGE_CHECK_VERIFY    Checks for change in a removable-media device.
IOCTL_STORAGE_EJECT_MEDIA    Ejects media from a SCSI device.
IOCTL_STORAGE_GET_MEDIA_TYPES    Obtains information about media support.
IOCTL_STORAGE_LOAD_MEDIA    Loads media into a device.
IOCTL_STORAGE_MEDIA_REMOVAL    Enables or disables the media eject mechanism.
 

For more detailed information on each control code, see its topic. In particular, each topic provides details on the usage of the lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, and lpBytesReturned parameters.
 

Автор: Girder 7.6.2006, 21:29
Что бы подключить драйвер... тебе достаточно прописать:
1. DriverPath
2. DriverName
3. DeviceName - NT

Ну а потом... воспользываться "автоматом" DriverInstall() - Функция установки(и получения дескриптора) драйвера(в одном флаконе)

Все остальное... по вкусу.

PS: После чего используй DriverIoControl  

Автор: gonzales 7.6.2006, 21:52
спасибо, буду пробовать 

Автор: gonzales 7.6.2006, 23:21
Цитата

3. DeviceName - NT


не совсем понял, что сюда писать? 

Автор: Girder 8.6.2006, 01:24
имя устройства 

Автор: gonzales 8.6.2006, 11:04
Цитата

имя устройства


это я понял, что имя устройства, где его взять, или это не важно, если я от фонаря напишу?

Добавлено @ 11:07 
Цитата

DriverInstall()


почему то не возвращает true, хотя и ошибок никаких нет 

Автор: gonzales 8.6.2006, 12:11
Код

driver1.DriverPath:='C:\WINDOWS\system32\drivers';
driver1.DriverName:='FlyPCI.sys';
driver1.DeviceName:='Beholder';
if driver1.DriverInstall=true then
showmessage('ok');
 

Автор: Girder 8.6.2006, 12:26
Цитата(gonzales @  8.6.2006,  13:11 Найти цитируемый пост)
driver1.DeviceName:='Beholder';
 smile 

PS:
Цитата(gonzales @  8.6.2006,  13:11 Найти цитируемый пост)
FlyPCI.sys
Прицепи его.
 

Автор: gonzales 8.6.2006, 12:41
прицепил

Добавлено @ 12:49 
все, с этим разобрался, сразу не сообразил вскрыть sys файл и посмотреть секцию data

Добавлено @ 12:55 
а почему при закрытии приложения вылезает ошибка доступа к драйверу???
нужно ли выполнять driver1.DriverRemove; 

Автор: gonzales 8.6.2006, 12:59
и еще один вопросsmile

функция DriverIoControl имеет массу параметров,

Girder, не могли бы Вы прокомментировать их 

Автор: Girder 8.6.2006, 13:21
Цитата(gonzales @  8.6.2006,  13:41 Найти цитируемый пост)
а почему при закрытии приложения вылезает ошибка доступа к драйверу???
Енто только при дизайне...

Добавлено @ 13:22 
Цитата(gonzales @  8.6.2006,  13:59 Найти цитируемый пост)
Girder, не могли бы Вы прокомментировать их 
Глчянь в нутрь компонента... там обильные коменты.
 

Автор: gonzales 8.6.2006, 13:34
а откуда брать управляющий код IoControlCode - из драйвера?

например, READ_REGISTER_USHORT.

вот такой код будет ли работать



Код

type
  TInBuffer = record
    wparam : Word;
    lparam : Word;
  end;
var
  BytesReturned : DWORD;
  InBuffer : TInBuffer;
  outBuffer : DWORD;
  PortAddr:DWORD;
begin
  PortAddr:=$1b2;
  InBuffer.wparam:=PortAddr;
  InBuffer.lparam:=0;
  if driver1.DriverIoControl(READ_REGISTER_USHORT,@inBuffer,4,@outBuffer,4,BytesReturned,nil)
      then Result := outBuffer else Result:=$FF;
  

Автор: gonzales 8.6.2006, 16:01
судя по всему READ_REGISTER_USHORT не работает, надо найти ее hex-выражение,
а где его искать???

это вопрос smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)