Заезженная тема,но что-то туплю :
LONG Size = 0;
PVOID UserMemory = NULL;
PVOID Memory = NULL;
PMDL Mdl = NULL;
__try
{
Memory = ExAllocatePool(NonPagedPool,Size);
if(Memory)
{
Mdl = IoAllocateMdl(Memory,Size,FALSE,FALSE,NULL);
if(Mdl)
{
MmBuildMdlForNonPagedPool(Mdl);
UserMemory = MmMapLockedPagesSpecifyCache(Mdl,UserMode,MmCached,NULL,FALSE,NormalPagePriority);
}
}
}
__except(EXCEPTION_EXECUTE_HANDLER){}
Затем я передаю UserMemory адрес в приложение.
Но по какому адресу мне в драйвере обращаются к выделенной памяти? — Memory? — происходит PAGE_FAULT,UserMemory — та же история....
Задача банальна — разделить память между приложением и драйвером,организовав в ней что-то на подобии очереди объектов...
x64,спасибо что откликнулся.С #PF проблему решил,там просто моя тупость была с обращениями к памяти.
AC>А уверен, что именно разделяемая память тебе тут лучше всего подойдёт?
Может, тупо складировать информацию в буфер и затем выгребать её периодически?
А если надо сразу данные передавать, тогда есть inverted calls, — с буферами возиться не придётся.
Мне необходимо достаточно резво реагировать в user-mode на события из драйвера,я думаю использовать очередь в разделяемой памяти,записывать из драйвера информацию в очередь и обрабатывать её в приложении.
inverted calls — а вот про это я не в курсе...
Здравствуйте, AlexCasual, Вы писали:
AC>inverted calls — а вот про это я не в курсе...
Для начала можно почитать
http://www.osronline.com/article.cfm?id=94, потом поробовать поискать примеры с использованием safe queue (IoCsqInitialize). В файловых минифильтрах fltmgr имеет свою реализацию (FilterGetMessage)
Здравствуйте, sobko, Вы писали:
S>Здравствуйте, AlexCasual, Вы писали:
AC>>inverted calls — а вот про это я не в курсе...
S>Для начала можно почитать http://www.osronline.com/article.cfm?id=94, потом поробовать поискать примеры с использованием safe queue (IoCsqInitialize). В файловых минифильтрах fltmgr имеет свою реализацию (FilterGetMessage)
Думаю мне не подходит отложенная обработка.Разделяемая очередь должна подойти...
Здравствуйте, AlexCasual, Вы писали:
AC>Здравствуйте, sobko, Вы писали:
S>>Здравствуйте, AlexCasual, Вы писали:
AC>>>inverted calls — а вот про это я не в курсе...
S>>Для начала можно почитать http://www.osronline.com/article.cfm?id=94, потом поробовать поискать примеры с использованием safe queue (IoCsqInitialize). В файловых минифильтрах fltmgr имеет свою реализацию (FilterGetMessage)
AC>Думаю мне не подходит отложенная обработка.Разделяемая очередь должна подойти...
Может вот эта статья поможет?
http://habrahabr.ru/post/144507/