Пятница, 29.03.2024, 00:23 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Neo, xXxSh@dowxXx  
delphicode » Обсуждения » Остальные языки программирования » [Delphi- C++]Учимся общаться с драйвером))) (Динамическая загрузка и выгрузка драйвера)
[Delphi- C++]Учимся общаться с драйвером)))
NeoДата: Среда, 17.04.2013, 11:34 | Сообщение # 1
Модератор
Зарегистрирован: 04.05.2010
Группа: Модераторы
Сообщений: 317
Статус: Offline
Привет всем!Хотел бы выложить совой класс для работы с драйврами.В классе реализованны следующие методы:
Регистрация драйвера в системе
Динамическая загрузка драйвера
Динамическая выгрузка драйвера
Удаление драйвера из системы
Расчёт IOCTO кода
и три метода общения с драйвером.
Вот код модуля dDriver:


Вот пример вызова:

Код

program DriverLoader;
{$Apptype Console}
uses
      windows,dDriver,SysUtils;
Var
      Name,Path:String;
      Driver: TDriver;
      DataToDriver,DataFromDriver:Array[0..19] of char;
      CTL:DWORD;
begin
      Name:= 'Share';
      Path:='D:\Sniffer\Share\i386\Share.sys';
      WriteLn('Name: ',Name);
      WriteLn('Path: ',Path);
      Driver:= TDriver.Create(pChar(Name),pChar(Path));

      {if Driver.Registered then
        WriteLn('Registered!')  else
        WriteLn('Not Registered!');

      if Driver.Load then
        WriteLn('Loaded!')  else
        WriteLn('Not Loaded!');}
        Driver.Start(3);
        CTL:=Driver.IOCTL_CODE(FILE_DEVICE_UNKNOWN,$803,METHOD_BUFFERED,FILE_ANY_ACCESS);
        //Поробуем передать драйверу Hellow...
        DataToDriver:='Project1.exe';
        Driver.WriteToDriver(DataToDriver,Length(DataToDriver));
        //Попробуем получить от драйвера Hellow.
        Driver.ReadFromDriver(DataFromDriver,SizeOf(DataFromDriver));
        WriteLn(DataFromDriver);
        //Попробуем и то и то
        FillChar(DataToDriver,0,SizeOf(DataToDriver));  FillChar(DataFromDriver,0,SizeOf(DataFromDriver));
        DataToDriver:='Hellow against!';
        Driver.ReadWrite(DataToDriver,SizeOf(DataToDriver),CTL,DataFromDriver,SizeOf(DataToDriver));
        WriteLn(DataFromDriver);
      {if Driver.UnLoad then
        WriteLn('UnLoad!')  else
        WriteLn('Not UnLoad!');

      if Driver.UnRegistered then
        WriteLn('UnRegistered!')  else
        WriteLn('Not UnRegistered!');}
        Driver.Stop;
     ReadLn;
end.


А вот исходник самого драйвера:

P.S запустите ещё DbgView,для просмотра DbgPrintoв.
 
xXxSh@dowxXxДата: Среда, 17.04.2013, 11:49 | Сообщение # 2
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Занимательно wink
 
maskaadsДата: Вторник, 30.08.2016, 17:26 | Сообщение # 3
Новичок
Зарегистрирован: 30.08.2016
Группа: Пользователи
Сообщений: 1
Статус: Offline
Уважаемый Neo данный код будет работать в системе windows7x64 bit ?
У меня динамическая загрузка драйвера с использованием SСManagera в системе windows7x64 bit не происходит,
хотя не меняя код ни приложения ни драйвера все отлично происходит в системе windows7x32 bit. Что можете
предложить к решению данной проблемы ?

Немного погуглив отвечу на свой вопрос сам. Данный код не сможет произвести загрузку драйвера в windows7x64 bit
всему виной то что это самопальный драйвер и не имеет цифровой подписи. Но код можно использовать в случае 32 разрядной
системы. Чтобы всё же воспользоваться им в 64 разрядной windows7 придется отключить проверку цифровой подписи (методов в
сети полно, даже есть рекомендации в msdn), скомпилировать приведенный драйвер для _amd64_ и пользоваться как того задумывал
автор. Автору большое спасибо за труды и их доступность.


нет повести печальнее на свете чем повесть о Ромео и Джульетте

Сообщение отредактировал maskaads - Среда, 31.08.2016, 18:02
 
delphicode » Обсуждения » Остальные языки программирования » [Delphi- C++]Учимся общаться с драйвером))) (Динамическая загрузка и выгрузка драйвера)
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2024 Хостинг от uCoz