Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Сообщение от драйвера к программе в User Mode с помощью DeviceIoControl  (Прочитано 7651 раз)
0 Пользователей и 1 Гость смотрят эту тему.
HighLander
Постоялец

il
Offline Offline
Пол: Мужской

« : 20-09-2007 18:11 » 

Всем привет!

Я пытаюсь послать что-то через Irp->AssociatedIrp.SystemBuffer но каждый раз когда я пытаюсь это сделать у меня появляется Blue Screen. Мне надо послать String. Как я могу послать указатель на на любую переменную?
Еще, если я устанавливаю Irp->IoStatus.Information = 0 то Blue Screen не появляется, но ничего не передается (потаму что из Irp->AssociatedIrp.SystemBuffer читается 0 байтов).

Буду очень благодарен если кто-то поможет...
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 20-09-2007 19:10 » 

не стоит посылать указатели. по крайней мере не стоит посылать указатели из Приложения - драйверу. это 100%.

впрочем.... не суть.
- как вы объявляете код(значение) IOCTL?
- как вы пытаетесь получить указатель в драйвере на данную память?
- Irp->IoStatus.Information при выходе из IOCTL должно содержать число байт записанных в выходной буфер(по крайней мере, если вы используете METHOD_BUFFERED).
блин, RTFM на что вобще созданы?Не понял
« Последнее редактирование: 20-09-2007 19:18 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
HighLander
Постоялец

il
Offline Offline
Пол: Мужской

« Ответ #2 : 20-09-2007 19:17 » 

Я нашел это где-то в интернете, и использавал. Оно выглядти так:

#define FILE_DEVICE_WDJDRV  0x00009500

#define WDJ_IOCTL_INDEX  0x950

#define IOCTL_WDJ_REQUEST   CTL_CODE(FILE_DEVICE_WDJDRV, WDJ_IOCTL_INDEX, METHOD_BUFFERED, FILE_ANY_ACCESS)
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 20-09-2007 19:19 » 

лучше используйте последнее. более прозрачно.
PS разве что FILE_DEVICE_WDJDRV - долно быть определено правильно
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 20-09-2007 19:23 » 

короче.
запускаете DDK хелп.
вводите в строку поиска IRP_MJ_DEVICE_CONTROL
и читаете все и внимательно)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
HighLander
Постоялец

il
Offline Offline
Пол: Мужской

« Ответ #5 : 20-09-2007 19:53 » 

Ok, спасибо!
Записан
buktak
Гость
« Ответ #6 : 22-09-2007 16:27 » 

Я так понял вы делаете присваивание:
Irp->AssociatedIrp.SystemBuffer = var;

А надо просто копировать:
RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer, var, num);
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines