Как работает драйвер режима ядра Windows для доступа к выгружаемой памяти? - PullRequest
3 голосов
/ 03 августа 2010

1) Процесс пользовательского режима имеет свой собственный «контекст адреса», который отображает виртуальные адреса пользовательского режима в уникальную коллекцию физических фреймов страницы.То есть значение любого конкретного виртуального адреса изменяется от одного момента к другому, когда планировщик Windows XP переключает потоки.

Часть работы по "переключению потоков" заключается в изменении страницытаблицы, чтобы они ссылались на контекст процесса входящего потока.

_

2) Драйвер режима ядра Windows выполняется в «произвольном контексте потока».

Драйвер можетсоздать системный поток и работать в его контексте ... но я говорю о ситуации, когда не создается системный поток.

Драйвер может использовать «ExAllocatePoolWithTag» для выделения страниц (память в энергозависимом хранилище).

_

3) Так как же драйвер получает доступ к выгружаемой памяти без какого-либо контекста ?

Как видно из пункта 1, выгружаемая памятьдоступ к ним осуществляется через таблицы страниц, которые являются "контекстно-зависимыми".

, когда драйвер работает в контексте некоторых других потоков ... то есть записи таблицы страниц указывают на соответствующий поток потоки.mem, как тогда драйвер может получить доступ к своей выгружаемой памяти?

PS: me noob при программировании ядра.Не сердись.

Ответы [ 2 ]

7 голосов
/ 04 августа 2010

Используется понятие "разделение адресного пространства пользователя / ядра". Адресное пространство каждого процесса разделено на нижнюю часть (обычно 2 ГБ), которая доступна для процесса в пользовательском режиме и отличается для каждого процесса, и верхнюю часть (оставшееся адресное пространство), которая доступна только в режиме ядра, и является то же для каждого процесса.

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

0 голосов
/ 27 мая 2013

Главное, на что нужно обратить внимание, это то, что все потоки имеют одинаковое отображение памяти ядра. Поэтому переключение контекста между потоками не оказывает (почти) никакого влияния на верхние 2 ГБ виртуальной памяти.

...