Как поменять отображение части MDL?
От: tsul Россия  
Дата: 25.05.06 13:00
Оценка:
Пишу драйвер приема информации (Numega DriverWorks C++ framework).
Такая вот задачка возникла:

Есть буфер num блоков по bsize и user_ptr на него:
ptr =  new (NonPagedPool) BYTE[bsize*num]; // bsize кратно PAGE_SIZE
mdl =  new (NonPagedPool) KMemory(ptr, bsize*num);
user_ptr = mdl->MapToUserSpace(); // в контексте user-проги

Есть еще отдельный блок размером bsize,
отображенный только в system space:
reserved = new (NonPagedPool) BYTE[bsize];

Пусть k — номер "плохого" (для драйвера;-) блока из ptr:
bad = ptr + k*bsize;

Как сделать, чтобы блок reserved стал отображаться туда,
куда отображается блок bad?

Точнее, как отобразить блок reserved в адресные пространствах драйвера и user-проги
туда, куда отображался блок bad, и снять отображения блока bad
(или отобразить его в системные виртуальные адреса блока reserved)
(при условии, что я в контексте проги)?

Пытался смотреть DDK-функции MmXxx, пока туго... Плохо, что описания MDL толком нет...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.