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

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

ru
Offline Offline

« : 30-09-2008 20:16 » 

Очень нужно записать два байта по двум адресам в физической памяти. Помогите пожалуйста, может у кого нибудь есть пример кода драйвера для подобных действий. Из юзермода ничего не получается. Драйвер нужен для Xp. Буду очень благодарен. Или может быть кто-нибудь знает, у кого я могу заказать этот драйвер за не очень большую сумму-)
Записан
iilisav
Участник

ru
Offline Offline

« Ответ #1 : 30-09-2008 20:17 » 

Заранее спасибо!
Записан
Ochkarik
Модератор

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

« Ответ #2 : 01-10-2008 13:10 » 

найдите пример самого самого простейшего драйвера. прстейший состоит из двух пустых функций DriverEntry|DriverUnload
примеров в сети полно.
далее воспользуйтесь командой:
PHYSICAL_ADDRESS
  MmGetPhysicalAddress(
    IN PVOID  BaseAddress
    );
Записан

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

ru
Offline Offline

« Ответ #3 : 02-10-2008 16:26 » 

Спасибо за ответ! А дальше что делать? Я так понимаю эта функция возвращает указатель на секцию памяти? А как туда записать? Что значит PHYSICAL_ADDRESS в начале? Можно чуть чуть поподробнее?
Записан
Ochkarik
Модератор

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

« Ответ #4 : 02-10-2008 18:55 » 

это 64 битный адрес физической памяти....
мда. кажется я поспешил... вам вроде как раз обратная задача нужна? по известным физическим... а функция что я дал - по известным виртуальным - дает физическое положение...

можно поподробнее - куда вы хотите таким образом писать?
Записан

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

ru
Offline Offline

« Ответ #5 : 03-10-2008 13:35 » 

#include "ntddk.h"

NTSTATUS MyUnload (IN PDRIVER_OBJECT DriverObject)
   {
   DbgPrint("Unloading driver....");
return STATUS_SUCCESS;
   }
NTSTATUS DriverEntry (IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING theRegistryPath)
   {
    VOID *Mem;
   char *Byt;
   PHYSICAL_ADDRESS Padd;
      
   DbgPrint("Start");
   
   Padd.LowPart = 0xC8000;
   Mem = MmMapIoSpace( Padd, 1, MmNonCached );
   
   Byt = (char*)Mem;
   if (*Byt) *Byt = 0x00;
   else *Byt = 0xFF;
   
   MmUnmapIoSpace( Mem, 1 );
   
   DriverObject->DriverUnload = MyUnload;
   return STATUS_SUCCESS;
   }
Записан
iilisav
Участник

ru
Offline Offline

« Ответ #6 : 03-10-2008 13:36 » 

C8000 это адрес затенённой памяти.
память брошена на регистр устройства на исе

мне надо из винды по этому физическому адресу (c8000) писать в регистр устройства один байт

но используя mmMapIoSpace ничего не добилися. Код привёл выше. При записи по c8000 ожидаемой реакции от устройства не следует.

была такая библиотечка "memport" . платная зараза (крякнут только вариант под делфи)
так вот через этот компонент я успешно писал данные в регистр по этому адресу . Я глянул в отладчике вызываемые из драйвера мемпорта функции и среди них была и mmMapIpSpace. Мне кажется что для доступа к затенённой памяти из винды - просто проекции на виртуальное пространство недостаточно..

мне кажется надо ещё что-то сделать, но не знаю что т.к. трудно найти внятный чистый драйвер который юзает запись в затенённую память. Помогите пожалуйста, буду очень рад!!!
Записан
Ochkarik
Модератор

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

« Ответ #7 : 03-10-2008 16:15 » 

Padd.HiPart - rnj кто обнуляет? и попробуйте байта четыре-восемь отобразить... килобайт, четыре. мало ли.. вроде про гранулярность не написано но все таки.

попробуйте MmMapLockedPagesSpecifyCache, хотя не должно отличаться...
MmGetVirtualForPhysical  - что за фигня - не понял) попробуйте тоже... в нете описание есть.
http://www.rsdn.ru/Forum/message/148231.flat.aspx - старенькая но может что то получится вытянуть.
http://www.woodmann.com/forum/archive/index.php/t-6516.html - тоже что то по делу...
ну и наверняка еще что найдется.
Записан

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

ru
Offline Offline

« Ответ #8 : 06-10-2008 13:01 » 

Я не знаете случайно кого-нибудь кто бы мог мне написать подобный драйвер за не очень много американских рублей-)
Записан
Ochkarik
Модератор

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

« Ответ #9 : 06-10-2008 19:54 » 

навряд ли)
напишите запрос в тему работа программистом, вдруг кто соблазниться)
а так там в общем то дел то на пару дней - попробуйте сами, подскажу чем смогу)
Записан

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

ru
Offline Offline

« Ответ #10 : 16-10-2008 14:22 » 

доступ получился через mmMapIoSpace-) Теперь не могу разобраться как передать из пользовательского приложения такие параметры как адрес по которому нужно записывать данные? Заранее спасибо
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines