Форум программистов, компьютерный форум, киберфорум
Программирование драйверов
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
Программирование драйверов Создание нескольких экземпляров объекта драйвера Здравствуйте. Прочёл книгу Солдатова (дважды), однако не нашёл там объяснения того, как можно создать несколько объектов (экземпляров) одного драйвера. У Солдатова в главе 3 "Простой драйвер "в-стиле-NT": Example.sys" приводится пример простого драйвера. В процедуре Unload производится "зачистка" объектов драйвера с учётом того, что их может быть несколько. Однако в процедурах DriverEntry и... https://www.cyberforum.ru/ drivers-programming/ thread1296478.html Программирование драйверов Обмануть драйвер флэшки
Здравствуйте Я разрабатываю устройство, которое поключается к ПК как MSC Моя задача ускорить вычитывание Я обнаружил что на этот процесс влияет планировщик задач Частота обращений к флэшки определяется статистикой, которая собирается при первых обращениях к ней Если комп решает что устройство откликается медленно, оно будет опрашиваться им реже Возможно ли написать какой-то Kernel...
Программирование драйверов Посторонние звуки в динамиках https://www.cyberforum.ru/ drivers-programming/ thread1294973.html
Идет трансляция интренет ТВ с торрентов иногда кто-то хулиганит и подмешивает в аудиопоток левые комментарии Компьютер без особой защиты антивирусом, там может быть все что угодно Каким софтом можно увидеть как формируется аудиопоток какие приложения микшируют что-то свое Буду рад рекомендациям Специалист какого рода может дать мне консультацию Где таких искать СПС
Программирование драйверов Не работает перехватчик клавиатуры Здравствуйте. Нашёл в инете пример драйвер-фильтра, выводящего скан-коды нажатых клавиш. Решил его модифицировать, чтобы заменять любую нажатую клавиша на "а" (английскую). Переделал. Естественно, не работает. Т.е. работает как раньше, но ничего не меняет. Если можно, подскажите, там всего три строчки буквально. Где поменял, выделено"/////////...". extern "C" { #include "ntddk.h" https://www.cyberforum.ru/ drivers-programming/ thread1294160.html
Программирование драйверов Связь между драйвером и приложением
здраствуйте! я вот создаю драйвер перехватчик для NtTerminateProcess. вопрос: как при каждом перехвате передавать строковые данные в приложение в usermode, а потом ждать ответа от приложения? Добавлено через 1 минуту знаю , что возможно запросить данные из драйвера в приложение с помощью "DeviceIoControl", но мне нужно чтобы драйвер сам передавал данные в приложение, без запроса.
Программирование драйверов Сетевая фильтрация url и ip адресов в wfp https://www.cyberforum.ru/ drivers-programming/ thread1291359.html
Доброго времени суток! Решил изучить технологию WFP (Windows Filtering Platform) и написать драйвер режима ядра для фильтрации url-адресов и ip-адресов с портами. Что нужно конкретно: Фильтрация url-адресов по get запросу и возможность блокировать их, выдавая пользователю причину и информацию (например, страница заражена и тп) Фильтрация и тот же функционал, что выше, но для...
Программирование драйверов Mmap буфера из пространства ядра в пространство пользователя https://www.cyberforum.ru/ drivers-programming/ thread1288503.html
Добрый день/вечер. При написании символьного драйвера для Debian, столкнулся с задачей применения mmap из пространства ядра в пространство пользователя. Прочитал LDD3, но всё равно остался без чёткого понимания реализации этой задачи. При инициализации модуля, создаётся файл устройства в /dev с помощью демона udev и read/write работающие с этим файлом работают хорошо, но вот только хочеться...
Не работает DbgView в виртуалке (Virtual Box) Программирование драйверов
Здравствуйте. Работаю в виртаальной Собственно проблема - не работает отладочный вывод DbgPrint. Или программа DbgView его не видит. Хост система: Windows 7. Гостевая - Windows XP. Думал, может сообщения в хостовскую систему транслируются. Посмотрел там - тоже не проходят.
Программирование драйверов Формирование сетевой информации, NDIS Добрый всем день, хочу попросить помощи в следующем вопросе: каким образом происходит общение между NDIS и остальными драйверами (соответственно смежными с NDIS)? С помощью каких пакетов, структур? Вообще интересна вся стадия от и до. Как пользователь может общаться с NDIS? На msdn`е конечно полно информации, но мне, как несведущему в этом вопросе, очень сложно разобраться и структурировать все... https://www.cyberforum.ru/ drivers-programming/ thread1284188.html Программирование драйверов WinUsb Microsoft provides a set of proprietary device classes and USB descriptors, which are called Microsoft OS Descriptors (MODs). When a new device is attached to a computer for the first time, an operating system that supports Microsoft OS Descriptors will request the string descriptor that is at index 0xEE. The Microsoft OS String Descriptor contains an embedded signature field that the operating... https://www.cyberforum.ru/ drivers-programming/ thread1283492.html
Прочитать Физическую память Программирование драйверов
В написании драйверов я новичок, постала передо мной задача: Нужно прочитать физическую память п
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
13.11.2014, 01:46 0

Маппирование памяти из user space в system space - Программирование драйверов - Ответ 6843513

13.11.2014, 01:46. Показов 2515. Ответов 7
Метки (Все метки)

Ответ

Цитата Сообщение от MickeyBlueEyes Посмотреть сообщение
Можно при передаче указателя запомнить процесс при помощи PsGetCurrentProcess, и потом при работе с этим указателем просто делать KeAttachProcess(результат PsGetCurrentProcess)
Только в этом случае следует сначала зареференсить указатель на процесс (ObReferenceObject).
А то процессы - они такие, иногда дохнут, а на их месте вырастают другие...

Цитата Сообщение от sergestus Посмотреть сообщение
А всегда ли при вызове драйвера (DeviceIoControl) он будет находиться в контексте вызвавшего его процесса?
Если это драйвер верхнего уровня, то всегда. Но если над вами в стеке устройств
сидит кто-то еще, то этот "кто-то" может отложить запрос (STATUS_PENDING), а
затем возобновить его из системного потока или work item-а, тогда мы
окажемся в контексте системы.

Цитата Сообщение от sergestus Посмотреть сообщение
Драйвер вводит поток данных из устройства. Хочется иметь прямой доступ к данным из приложения, чтобы не делать системных вызовов.
В таком случае лучше сделать объект-секцию и использовать ее.
Фактически это и есть разделяемая память, только завернутая в объектный API системы.
Поищите в Гугле документ под названием "User-Mode Interactions: Guidelines for
Kernel-Mode Drivers", там такие вещи хорошо объясняются.

Цитата Сообщение от sergestus Посмотреть сообщение
Кажется это то, что мне нужно, насколько я понимаю буфер лочится в памяти при помощи MmProbeAndLockPages с параметром UserMode для буфера выделенного приложением ?
Да.
Не забудьте про try/except (и ProbeForRead/Write, если работаете с "сырым"
буфером, который пришел из user mode), иначе любой желающий с помощью
вашего драйвера сможет легко ронять систему в BSOD (без админских прав и т.п.),
или еще чего похуже. Про capture arguments и double fetch пока не пишу,
чтобы не пугать раньше времени

Цитата Сообщение от MickeyBlueEyes Посмотреть сообщение
Если память в свопе и будем на этих уровнях, то будет бсод
Не будет. Потому что:

MmProbeAndLockPages routine
http://msdn.microsoft.com/en-u... 85%29.aspx
MmProbeAndLockPages performs the following operations:

1. If the specified memory range is paged to a backing store (disk,
network, and so on), MmProbeAndLockPages makes it resident.

2. The routine then confirms that the pages permit the operation specified
by the Operation parameter.

3. If the memory range permits the specified operation, the routine locks
the pages in memory so that they cannot be paged out.
Use the MmUnlockPages
routine to unlock the pages.

4. Finally, the routine updates the page frame number (PFN) array in
the MDL to describe the locked physical pages.
То есть, функция сделает блок памяти резидентным и заблокирует в памяти.
До вызова MmUnlockPages своппинг ему не грозит, можете писать туда
хоть на IRQL == HIGH_LEVEL

Но обращаться к этой памяти пока можно только в контексте исходного процесса,
вот зачем нужна еще MmGetSystemAddressForMdlSafe - она создаст отображение
памяти на системный диапазон, после чего работать с ней можно будет в
контексте любого процесса (разумеется, через полученный указатель, а не
через исходный).

Из контекста нужного процесса.
C
1
2
3
4
5
int size = 128;
char* system_ptr = (char*)ExAllocatePool(NonPagedPool, size);
PMDL mdl = IoAllocateMdl(system_ptr, size, 0, 0, 0);
MmBuildMdlForNonPagedPool(mdl);
char* user_ptr = (char*)MmMapLockedPagesSpecifyCache(mdl, UserMode, MmCached, 0, 0, NormalPagePriority);
Тут не хватает try/except вокруг MmMapLockedPagesSpecifyCache, и по-хорошему,
системный буфер перед тем, как мапить в user mode, следует обнулить.
Мало ли там какие данные лежали до этого - пароли, имена, явки...

Вернуться к обсуждению:
Маппирование памяти из user space в system space Программирование драйверов
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.11.2014, 01:46
Готовые ответы и решения:

Доступ к PCI Configuration Space
Мне необходим доступ к PCI Configuration Space некоторого PCI устройства. Есть функции...

Kernel space и виртуальная таблица процесса
Приветствую, к примеру имеется dll файл который будет проецироваться в kernel space. Вопрос такой,...

Out of stack space
Добрый день. Разбираюсь с формами VBA, написал следующий код. Он выводит квадратный объект...

No space left on device
Всем привет. В общем, ситуация такая. Записал дистрибутив на флешку (8 гб). Начал создавать свой...

7
13.11.2014, 01:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.11.2014, 01:46
Помогаю со студенческими работами здесь

Java heap space
Здравствуйте. Есть цикл который прогоняет около миллиона итераций. Каждая итерация сначало получает...

Установка Crystal Space
Приветствую всех. Я тут решил заняться геймдевом, пока чисто для саморазвития... Нарыл такую вещь....

OutOfMEmoryError PerGen space
Здравствуйте. Такая проблема. Есть код public class PermGenSpace { public static void...

Unbound: No buffer space available
Имеется Unbound 1.4.21 module Iterator. Обслуживает абонентскую сеть, в логи сыпятся сообщения...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru