APIC + BSOD

Тема в разделе "WASM.NT.KERNEL", создана пользователем Pavia, 6 дек 2008.

  1. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Пробую написать драйвер и пообщаться с IOAPIC но поподаю на BSOD может кто что подскажет?

    Код (Text):
    1. IOAPIC=0FEC00000h
    2.     fastcall MmMapIoSpace,IOAPIC,4*1024,MmNonCached
    3.     mov dword ptr [eax],10h
    4.     mov eax,dword ptr [eax+10h]
    5.     push eax    
    6.     fastcall MmUnmapIoSpace,ebx,4*1024
     
  2. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    для полноты картины
    Код (Text):
    1. mov eax, dwAddress
    2. xchg eax,ebx; << предлогаю это опустить под вызов MmMapIoSpace
    3. fastcall MmMapIoSpace,IOAPIC,4*1024,MmNonCached; << память мапим, получаем адрес региона в еах
    4. mov dword ptr [eax],10h
    5. mov eax,dword ptr [eax+10h]
    6. push eax    
    7. fastcall MmUnmapIoSpace,ebx,4*1024; << анмапим левую память, указатель на которую в ebx=dwAddress...
    8. pop eax
     
  3. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Freeman
    Бсод раньше так что это не влияет. Поправил.
    пробвал так

    Код (Text):
    1.     fastcall MmMapIoSpace,IOAPIC,4*1024,MmNonCached
    2.             mov ebx,eax
    3.             fastcall MmUnmapIoSpace,ebx,4*1024
    Всеравно бсод.
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Судя по этому и тому что пишут. BSOD происходит из-за того что IRQL не того уровня. Нужно поднять уровень привелегий, а как это сделать?
     
  5. blast

    blast New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    170
    http://www.osronline.com/ddkx/kmarch/k106_9j5e.htm
    KeRaiseIrql
    http://www.osronline.com/DDKx/kmarch/k105_02eq.htm
     
  6. Rodin

    Rodin New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    125
    Есть баги
    1) fastcall юзается вместо stdcall (invoke)
    2) нет проверки на null от MmMapIoSpace
    3) 1-й параметр MmMapIoSpace 8байт, хз что в masm с приведением типов

    А приоритет тут непричем.
     
  7. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Rodin
    Спасибо разобрался, помого.
    Все три пункта. =) С 15 бзода заработало.
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    IRQL тут не при чем =) у винды любой пейдж фаулт при irql>1 это сразу IRQL_NOT_LESS_OR_EQUAL, проблема в повреждении памяти, которая у тебя возникала изза неправильной конвенции вызова.
    вывод: юзать си, где контролируются типы =))