Очень нужна помощь!!! Доступ в память.

Тема в разделе "WASM.BEGINNERS", создана пользователем iilisav, 26 сен 2008.

  1. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    MmMapIoSpace()
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Де мои сто баксов ?
     
  3. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    За то что умеешь гуглом пользоваться ?
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Да!
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Нигма круче :)
     
  6. iilisav

    iilisav New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    15
    Спасибо за ответы! От обещаний не отказываюсь-) Но mmMapIoSpace() не работает или я что то не то делаю, помогите пожалуйста разобраться!!! Вот код драйвера где я хочу записать один бит по линейному адресу CD200.
    Код (Text):
    1. #include "ntddk.h"
    2.  
    3. NTSTATUS MyUnload (IN PDRIVER_OBJECT DriverObject)
    4.    {
    5.     DbgPrint("Unloading driver....");
    6. return STATUS_SUCCESS;
    7.    }
    8. NTSTATUS DriverEntry (IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING theRegistryPath)
    9.    {
    10.     VOID *Mem;
    11.     char *Byt;
    12.     PHYSICAL_ADDRESS Padd;
    13.        
    14.     DbgPrint("Start");
    15.    
    16.     Padd.LowPart = 0xC8000; //Пробывал и также QuardPart
    17.     Mem = MmMapIoSpace( Padd, 1, MmNonCached );
    18.    
    19.     Byt = (char*)Mem;
    20.     if (*Byt) *Byt = 0x00;
    21.     else *Byt = 0xFF;
    22.    
    23.     MmUnmapIoSpace( Mem, 1 );
    24.    
    25.     DriverObject->DriverUnload = MyUnload;
    26.     return STATUS_SUCCESS;
    27.    }
    Но при загрузке этого драйвера ничего не меняется.
     
  7. iilisav

    iilisav New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    15
    То есть по адрессу C8000.
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Что гугль не помог)
    Скажи прямо что хочешь биос писать; [0xC0000 % 0xDFFFF] - расширенная память биос(флэш), базовая часть ROM - 0xE0000 % 0xFFFFF, хотя могу ошибаться.
    Найди smbios.h/smbios.c - интересные сорсы.
    А старшую часть адреса ты всётаки обнули.
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    iilisav
    Кстати, тут на форуме добрые люди сорсы биос выложили, так вот тебе туда. В памяти образ только для чтения(типа теневой биос), а при записи все операции выполняются с портами, такчто пустая трата времени юзать память пытаясь записать чтолибо в чип.
    Сех ты не юзаешь, значит еслибы MmMapIoSpace() исполнилась с ошибкой, возвратив ноль - былбы голубой огонёк.
    Значит - либо код не исполняется вообще, либо всё окей. Если предположить что код исполняется - ты проверяешь корректность исполнения визуально, тоесть POST/молчит :lol:
    Гиблое дело это. Я тоже давно хотел флэш писать - но так и не взялсо, не хочу комп убивать.
     
  10. Arisu

    Arisu Алиса Селезнёва

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    89
    C8000 это адрес затенённой памяти.
    память брошена на регистр устройства на исе

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

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

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

    мне кажется надо ещё что-то сделать, но не знаю что т.к. трудно найти внятный чистый драйвер который юзает запись в затенённую память
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Arisu
    Мне чтото кажется что это всётаки биос.
    Заполнять нужно все поля, а то хз что там в стеке и какой адрес получается.
     
  12. iilisav

    iilisav New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    15
    Это точно не биос. Вот нашел интересную статейку http://www.insidepro.com/kk/073/073r.shtml. раздел доступ в физическую память. Вот только мой адрес не попадает в диапазона 80000000h:A0000000h. Помогите с советом как быть-) Заранее спасибо