Физическая адресация в WinNT
От: _dIAMOND_ Россия  
Дата: 02.09.02 18:21
Оценка:
Предположим, я знаю физический адрес некоторой структуры, как мне ее считать/записать? Код должен выполняться под WinNT ring 0.
Re: Физическая адресация в WinNT
От: Roman_M rgmroman.narod.ru
Дата: 03.09.02 11:55
Оценка:
Здравствуйте _dIAMOND_, Вы писали:

D>Предположим, я знаю физический адрес некоторой структуры, как мне ее считать/записать? Код должен выполняться под WinNT ring 0.


Надо делать ZwOpenSection на "\Device\PhysicalMemory" а потом мапить нужный адрес. Под подробности и готовый должен быть
на www.sysinternals.com. Асм скорее всего не понадобится. Но это только для администратора.
Re[2]: Физическая адресация в WinNT
От: Lonely Dog Россия  
Дата: 03.09.02 13:29
Оценка:
RM>Надо делать ZwOpenSection на "\Device\PhysicalMemory" а потом мапить нужный адрес. Под подробности и готовый должен быть
RM>на www.sysinternals.com. Асм скорее всего не понадобится. Но это только для администратора.

не согласен. автор вопроса писал, что это дело должно работать в ring0, то есть в драйвере, то есть привилегии админа не нужны. кстати, в NT4 DDK есть пример драйвера mapmem. нам описано, как сделать тоже самое, не прибегая к NativeAPI.
Re[3]: Физическая адресация в WinNT
От: Roman_M rgmroman.narod.ru
Дата: 05.09.02 11:09
Оценка:
Здравствуйте Lonely Dog, Вы писали:


RM>>Надо делать ZwOpenSection на "\Device\PhysicalMemory" а потом мапить нужный адрес. Под подробности и готовый должен быть

RM>>на www.sysinternals.com. Асм скорее всего не понадобится. Но это только для администратора.

LD>не согласен. автор вопроса писал, что это дело должно работать в ring0, то есть в драйвере, то есть привилегии админа не нужны. кстати, в NT4 DDK есть пример драйвера mapmem. нам описано, как сделать тоже самое, не прибегая к NativeAPI.



В файле general\mapmem\sys\mapmem.c тоже используется ZwOpenSection на "\Device\PhysicalMemory"

    //
    // Get a pointer to physical memory...
    //
    // - Create the name
    // - Initialize the data to find the object
    // - Open a handle to the oject and check the status
    // - Get a pointer to the object
    // - Free the handle
    //

    RtlInitUnicodeString (&physicalMemoryUnicodeString,
                          L"\\Device\\PhysicalMemory");

    InitializeObjectAttributes (&objectAttributes,
                                &physicalMemoryUnicodeString,
                                OBJ_CASE_INSENSITIVE,
                                (HANDLE) NULL,
                                (PSECURITY_DESCRIPTOR) NULL);

    ntStatus = ZwOpenSection (&physicalMemoryHandle,
                              SECTION_ALL_ACCESS,
                              &objectAttributes);

    if (!NT_SUCCESS(ntStatus))
    {
        MapMemKdPrint (("MAPMEM.SYS: ZwOpenSection failed\n"));

        goto done;
    }

только там еще добавлены вызовы ObReferenceObjectByHandle и HalTranslateBusAddress.

Я, конечно, не спициалист по драйверам для NT, но насколько я знаю драйвера официально могут использовать NativeAPI
в отличии от user-mode программ и к тому же для драйвером доступно несколько болшьше вызовов API, в том числе доступен
HAL-API.
Re: Физическая адресация в WinNT
От: Murr Россия  
Дата: 06.12.02 17:33
Оценка:
Здравствуйте, _dIAMOND_, Вы писали:

D>Предположим, я знаю физический адрес некоторой структуры, как мне ее считать/записать? Код должен выполняться под WinNT ring 0.


DWORD MiMapPageInHyperSpace (DWORD BaseAddr,OUT PDWORD Irql);
В принципе, ничего не мешает сделать это вручную в ядре.
Re[2]: Физическая адресация в WinNT
От: Murr Россия  
Дата: 06.12.02 18:58
Оценка:
Здравствуйте, Murr, Вы писали:

M>Здравствуйте, _dIAMOND_, Вы писали:


D>>Предположим, я знаю физический адрес некоторой структуры, как мне ее считать/записать? Код должен выполняться под WinNT ring 0.


M>DWORD MiMapPageInHyperSpace (DWORD BaseAddr,OUT PDWORD Irql);

M>В принципе, ничего не мешает сделать это вручную в ядре.

Посмотрел сейчас — в 2k уже этой функции нет. Есть некая MmGetVirtualForPhysical.
Re: Физическая адресация в WinNT
От: _dIAMOND_ Россия  
Дата: 07.12.02 16:06
Оценка:
Я уже давно это сделал, если кому надо — запостю.
Re[3]: Физическая адресация в WinNT
От: Аноним  
Дата: 07.12.02 18:19
Оценка:
M>Посмотрел сейчас — в 2k уже этой функции нет. Есть некая MmGetVirtualForPhysical.

MiMapPageInHyperSpace в Win2k есть — она просто не экспортируется из ntoskrnl.exe
Re[2]: Физическая адресация в WinNT
От: Алекс Россия http://wise-orm.com
Дата: 08.12.02 11:13
Оценка:
Здравствуйте, _dIAMOND_, Вы писали:

D>Я уже давно это сделал, если кому надо — запостю.


Давай.
Re[4]: Физическая адресация в WinNT
От: Murr Россия  
Дата: 08.12.02 17:27
Оценка:
Здравствуйте, Аноним, Вы писали:

M>>Посмотрел сейчас — в 2k уже этой функции нет. Есть некая MmGetVirtualForPhysical.


А>MiMapPageInHyperSpace в Win2k есть — она просто не экспортируется из ntoskrnl.exe


Как я понимаю, MmGetVirtualForPhysical делает то же самое.
Вообще, политика M$ не писать Doc по таким функциях несколько удивляет.
В Linux я делаю kmap() и в ус не дую, а здесь рискую сломать %%пу.
Re: Физическая адресация в WinNT
От: Maxim S. Shatskih Россия  
Дата: 17.06.04 16:13
Оценка: +1
_IA>Предположим, я знаю физический адрес некоторой структуры, как мне ее
>считать/записать? Код должен выполняться под WinNT ring 0.

MmMapIoSpace.
Занимайтесь LoveCraftом, а не WarCraftом!
Re[2]: Физическая адресация в WinNT
От: iilisav  
Дата: 03.10.08 13:09
Оценка:
Здравствуйте, _dIAMOND_, Вы писали:

_IA>Я уже давно это сделал, если кому надо — запостю.


Где же обещанный пост?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.