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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Причины фаулта MmGetSystemAddressForMdl (Safe)  (Прочитано 7988 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Anonymous
Гость
« : 28-01-2004 18:15 » 

хм.....че та тут не то  Так больше нельзя... .....фаулт при отображении MDL

буферинг - прямой METHOD_IN_DIRECT


         if (ioStack->Parameters.DeviceIoControl.InputBufferLength < 10)
         {
            code = STATUS_INVALID_BUFFER_SIZE;
            break;
         }



         __try {
            pWriteByte = (unsigned char*)
               MmGetSystemAddressForMdl(Irp->MdlAddress);
            if (pWriteByte == NULL)
               DbgPrint("MmGetSystemAddressForMdl Fail!\n");
         }
         __except(EXCEPTION_EXECUTE_HANDLER) {
            DbgPrint("Sorry...\n");
            
            __try {
               pWriteByte = (unsigned char*)
                  MmGetSystemAddressForMdlSafe(Irp->MdlAddress,
                     LowPagePriority);
            if (pWriteByte == NULL)
               DbgPrint("MmGetSystemAddressForMdlSafe Fail!\n");
            }
            __except(EXCEPTION_EXECUTE_HANDLER) {
               DbgPrint("Sorry2...\n");
            }

         }



Че делать то?
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #1 : 28-01-2004 22:37 » 

А ты учел, что при METHOD_IN_DIRECT  в Irp->MdlAddress содержится MDL только для выходного буфера, а входной- как в buffered методе через системный буфер передается AssociatedIrp.SystemBuffer.  У тебя выходной буфер есть?
Записан
Anonymous
Гость
« Ответ #2 : 29-01-2004 07:46 » 

Так вроде для METHOD_IN_DIRECT в MDL преобразуется входной буфер?
В смысле входной  Вот такой я вот : У меня в драйвер должен передаваться буфер в виде MDL
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #3 : 29-01-2004 07:56 » 

Цитата

Так вроде для METHOD_IN_DIRECT в MDL преобразуется входной буфер?
В смысле входной  : У меня в драйвер должен передаваться буфер в виде MDL


Лучшем ответом будет ответ W.Oney
Цитата

Both METHOD_IN_DIRECT and METHOD_OUT_DIRECT are handled the same way in the driver. They differ only in the access rights required for the user-mode buffer. METHOD_IN_DIRECT needs read access; METHOD_OUT_DIRECT needs read and write access. With both of these methods, the I/O Manager provides a kernel-mode copy buffer (at AssociatedIrp.SystemBuffer) for the input data and an MDL for the output data buffer.


Если хочешь MDL в IOCTL то используй METHOD_NEITHER и сам создавай MDL. У тебя наверняка NULL==Irp->MdlAddress , проверь.
Записан
Anonymous
Гость
« Ответ #4 : 29-01-2004 08:03 » 

Цитата

Если хочешь MDL в IOCTL то используй METHOD_NEITHER и сам создавай MDL. У тебя наверняка NULL==Irp->MdlAddress , проверь.

ага, ноль   :oops:
лан, я еще посмотрю че делать то...
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #5 : 02-02-2004 06:37 » 

А можно и так сделать- передай в DeviceIoControl свой входной(in)буфер, как выходящий(out) буфер. И читай из драйвера MDL. Какая разница как буферп передавать-как in или out? Только в названии и out переделывается в MDL, а это то что тебе надо.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines