Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Kernel Mode: зная виртуальный адрес надо определить физический

13K
19 сентября 2005 года
flashLAV
1 / / 19.09.2005
Добрый день
Суть проблемы:
-есть устройство PCI, которое, при соответствующем программировании, осуществляет передачу данных
в некий буфер, адрес которого я и должен указать ему.
Сразу оговорюсь, устройство является Bus Master-ом, но оно все делает само, т.е., я отношения к DMA не имею
Так вот, нужно:
- выделить непрерывный участок в памяти и его физический адрес передать в устройство
- этот же участок памяти должен быть доступен в приложении пользователя (3-е кольцо) для обработки данных, поступающих
от устройства
Пробую делать так:

MmAllocateContigouoseMemory(Size,....)
IoAllocateMDL()
ProbeAndLockPages(...UserMode) - здесь получил адрес буфера в приложении пользователя (соответственно, через IOCTL)

А от какой функции брать теперь MmGetPhysicalAddress Давить
Или вообще, моя концепция неправильная - может, нужно MmMapIoSpace использовать?
Тогда, от чего его (MmMapIoSpace) брать?
В общем, помогите, кто чем может, а то совсем запутался
С уважением, Алексей Локис
[email]flash2001@newmail.ru[/email]
8.8K
06 октября 2005 года
sighted
9 / / 23.12.2004
Цитата:
Originally posted by flashLAV
Добрый день
Суть проблемы:
-есть устройство PCI, которое, при соответствующем программировании, осуществляет передачу данных
в некий буфер, адрес которого я и должен указать ему.
Сразу оговорюсь, устройство является Bus Master-ом, но оно все делает само, т.е., я отношения к DMA не имею
Так вот, нужно:
- выделить непрерывный участок в памяти и его физический адрес передать в устройство
- этот же участок памяти должен быть доступен в приложении пользователя (3-е кольцо) для обработки данных, поступающих
от устройства
Пробую делать так:

MmAllocateContigouoseMemory(Size,....)
IoAllocateMDL()
ProbeAndLockPages(...UserMode) - здесь получил адрес буфера в приложении пользователя (соответственно, через IOCTL)

А от какой функции брать теперь MmGetPhysicalAddress Давить
Или вообще, моя концепция неправильная - может, нужно MmMapIoSpace использовать?
Тогда, от чего его (MmMapIoSpace) брать?
В общем, помогите, кто чем может, а то совсем запутался
С уважением, Алексей Локис
[email]flash2001@newmail.ru[/email]


Какая ось? Винда?

1
04 ноября 2005 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by flashLAV
Добрый день
Суть проблемы:
-есть устройство PCI, которое, при соответствующем программировании, осуществляет передачу данных
в некий буфер, адрес которого я и должен указать ему.
Сразу оговорюсь, устройство является Bus Master-ом, но оно все делает само, т.е., я отношения к DMA не имею
Так вот, нужно:
- выделить непрерывный участок в памяти и его физический адрес передать в устройство
- этот же участок памяти должен быть доступен в приложении пользователя (3-е кольцо) для обработки данных, поступающих
от устройства
Пробую делать так:

MmAllocateContigouoseMemory(Size,....)
IoAllocateMDL()
ProbeAndLockPages(...UserMode) - здесь получил адрес буфера в приложении пользователя (соответственно, через IOCTL)

А от какой функции брать теперь MmGetPhysicalAddress Давить
Или вообще, моя концепция неправильная - может, нужно MmMapIoSpace использовать?
Тогда, от чего его (MmMapIoSpace) брать?
В общем, помогите, кто чем может, а то совсем запутался
С уважением, Алексей Локис
[email]flash2001@newmail.ru[/email]


Возможно не понял вопроса - используй вызов MmGetMdlVirtualAddress - и его передавай в MmGetPhysicalAddress - я так понимаю, тебе ведь необходим адрес MDL-списка, который ты выделил? Или можно использовать тот адрес который ты передал IoAllocateMDL() - но мне кажется корректней вс же будет получить адрес после закрепления страниц в памяти.

14K
09 ноября 2005 года
Ember
7 / / 09.11.2005
Цитата:
Originally posted by kot_
Возможно не понял вопроса - используй вызов MmGetMdlVirtualAddress - и его передавай в MmGetPhysicalAddress - я так понимаю, тебе ведь необходим адрес MDL-списка, который ты выделил? Или можно использовать тот адрес который ты передал IoAllocateMDL() - но мне кажется корректней вс же будет получить адрес после закрепления страниц в памяти.



А как использовать MmGetPhysicalAddress?
В MSDN прототип вроде простой, но я не могу подключить эту функцию, хотя явно указываю #include <ntddk.h>. В чем может быть проблема?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог