ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Проблемы с написанием драйвера
  #1  
Старый 25.09.2007, 15:45
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию Проблемы с написанием драйвера

Вот сталкнулся с такой проблемой:
Програма должна постоянно считывать
через из драйвера через:

ReadFile струткуру следующего типа:

typedef struct _TMySTRUC // структура описывающая запрос к драйверу
{
HANDLE z1;
HANDLE z2;
} TMySTRUC, *PMySTRUC;

ВОт не могу написать как именно осуществить запись со стороны драйвера.
к примеру:

Код:
 TMySTRUC mystruc;
 mystruc->z1=11111;
 mystruc->z2=22222;

 irpStack = IoGetCurrentIrpStackLocation (Irp);
 if (irpStack->MajorFunction == IRP_MJ_READ)
 {
ВОт что сюда вставить, чтобы передаться струкруру
mystruc?????
 }

 Irp->IoStatus.Status = STATUS_SUCCESS;
 IoCompleteRequest(Irp, IO_NO_INCREMENT);
 return STATUS_SUCCESS;
Еще чуть запустался с IRP_MJ_READ и IRP_MJ_WRITE

КАк я понял irpStack->MajorFunction == IRP_MJ_READ
будет тогда когда програма будет читать данные из драйвера т.е. readfile, а IRP_MJ_WRITE - когда будет писать чтото драйверу.
Перебрал кучу документаций так толком и не понял как осуществить чтение и запись.
 
Ответить с цитированием

  #2  
Старый 25.09.2007, 16:19
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

какой тип ввода-вывода?
1) если buffered (DO_BUFFERED_IO), тогда Irp->AssotiatedIrp.SystemBuffer указывает на системный буффер, который потом будет скопирован в пользовательский выходной (если это IRP_MJ_READ) или в который уже скопирован входной (если это IRP_MJ_WRITE)

другие типы тебе пока не нужны.. запутаешься нафиг.
тебе нужно лишь проверить длину буффера и скопировать туда структуру
 
Ответить с цитированием

  #3  
Старый 27.09.2007, 16:58
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

Чтото начал делать в этоге при копировании идет BSOD
Вообще драйвер должен перехватывать запуск процессов.
И потом по требованию возвращать PID и PARENT последнего запущенного процесса.
Код функции обработчика:
Код:
if (irpStack->MajorFunction == IRP_MJ_READ)
 {
   DPRINT("READ");
   if (irpStack->Parameters.Read.Length < 8)
    {
	    DPRINT("LENGTH < 8");
        Irp->IoStatus.Status = status = STATUS_BUFFER_TOO_SMALL;
        Irp->IoStatus.Information  = 0;
        IoCompleteRequest (Irp, IO_NO_INCREMENT);
        return status;
    } else
	{
          DPRINT("LENGTH OK");	
Еcли раскоментировать, то BSOD >>>	 //RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer, &RUNPROC, 8);


 	 Irp->IoStatus.Status = status = STATUS_SUCCESS;
  	 IoCompleteRequest (Irp, IO_NO_INCREMENT);
      return status;
	}
 }
где
TRUNPROC RUNPROC
typedef struct _TRUNPROC
{
HANDLE parent;
HANDLE PID;
} TRUNPROC, *PRUNPROC;


И вот вопрос еще один. Как мне получать то, что выводится через DbgPrint?
Юзаю WinDbg. Т.е. я запускаю через него прогу, которая общается с драйвером, но почемуто сообщения от DbgPrint на экране они не появляются
 
Ответить с цитированием

  #4  
Старый 27.09.2007, 17:12
Ni0x
Постоянный
Регистрация: 27.08.2006
Сообщений: 367
Провел на форуме:
2009677

Репутация: 472
По умолчанию

Путаешь. Для просмотра сообщений от DbgPrint тебе нужен DebugView от Sysinternals.
Сейчас посмотрю код.
 
Ответить с цитированием

  #5  
Старый 27.09.2007, 21:33
Ky3bMu4
Постоянный
Регистрация: 03.02.2007
Сообщений: 520
Провел на форуме:
1777536

Репутация: 932


Отправить сообщение для Ky3bMu4 с помощью ICQ
По умолчанию

Если я не ошибаюсь, то для передачи информации драйвер<->программа драйвер должен создать устройство, через которое будет передаваться инфа. Вот тебе:
http://www.wasm.ru/article.php?article=apihook_3 (см.Взаимодействие драйвера с приложением)
И вот: http://wasm.ru/article.php?article=drvw2k04
 
Ответить с цитированием

  #6  
Старый 27.09.2007, 22:27
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

не с устройсвом всё ок. всё создано отлично. И пашет отлично. А вот тока как именно драйвер должен передать ответ - хз.
На счет васма - процел всё - толком там не описано.
 
Ответить с цитированием

  #7  
Старый 27.09.2007, 22:51
Ni0x
Постоянный
Регистрация: 27.08.2006
Сообщений: 367
Провел на форуме:
2009677

Репутация: 472
По умолчанию

Да сделай ты через DeviceIoControl, проще будет, один из аргументов функции - буфер для обратного ответа. Будешь передавать драйверу IOCTL коды.
Код:
#define IOCTL_GETPID CTL_CODE(FILE_DEVICE_UNKNOWN, 0x01, \
	METHOD_BUFFERED, \
	FILE_READ_DATA | FILE_WRITE_DATA)
А драйвер будет обрабатывать их.
Код:
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = MyIrp;
...
NTSTATUS MyIrp(IN PDEVICE_OBJECT dev, IN PIRP pirp)
{
...
switch (ioctl_code)
	{
	case IOCTL_GETPID:
		GetPid();
		break;
	default:	
		ns = STATUS_INVALID_DEVICE_REQUEST;
	}
...
 
Ответить с цитированием

  #8  
Старый 27.09.2007, 23:12
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

с DbgPrint разобрался +

----------
Суть в том, что я юзаю DeviceIoControl для чуть другйо функции.
а именно - защита процесса. Чтобы его не могли выкинуть стандартными методами.
у меня он заюзан вот так:
if (irpStack->MajorFunction == IRP_MJ_DEVICE_CONTROL)
ProtectedPid = (HANDLE)irpStack->Parameters.DeviceIoControl.IoControlCode;

Последний раз редактировалось slesh; 27.09.2007 в 23:19..
 
Ответить с цитированием

  #9  
Старый 27.09.2007, 23:26
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

2 Ni0x В принципе можно былобы и сделать как ты говоришь, но тогда таже проблема - чтение и запись.
 
Ответить с цитированием

  #10  
Старый 27.09.2007, 23:27
Ni0x
Постоянный
Регистрация: 27.08.2006
Сообщений: 367
Провел на форуме:
2009677

Репутация: 472
По умолчанию

И в чем проблема использовать DeviceIoControl для всего?
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Bsod. [Причины/Решения] rijy Windows 15 23.04.2007 21:13
Проблемы с Аничатовскими штучками. temon Болталка 4 27.09.2005 12:52
Драйвера JazzzSummerMan Схемы и программы 4 10.09.2005 14:51
ПРОБЛЕМЫ С ВИНДОЙ!!! ГЛЮК ИЛИ ЖУК??? Demerus С/С++, C#, Delphi, .NET, Asm 18 16.01.2005 12:53
Проблемы с essential net tools Чаты 1 26.11.2002 19:46



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ