Блокировать доступ к физическому адресу в Windows - PullRequest
0 голосов
/ 11 марта 2010

Я получаю доступ к своему устройству, отображаемому в памяти, через физическую память конкретного устройства на ПК. Это делается с помощью драйвера, который отображает конкретный физический адрес на указатель в линейной памяти в моем адресном пространстве процесса.

Я хотел бы узнать, можно ли каким-либо образом получить блок по определенному физическому адресу и предотвратить доступ других процессов или устройств к этому физическому адресу?

Преобразование физического адреса в линейный адрес выполняется с помощью стороннего драйвера: TVicHW32 .

РЕДАКТИРОВАТЬ: я могу воспроизвести сценарий, если я запускаю 2 экземпляра моего приложения с разными флагами. Оба экземпляра могут обращаться к одной и той же конкретной физической памяти, которая не является частью пространства памяти ни одного из процессов.

1 Ответ

2 голосов
/ 11 марта 2010

Драйвер Youd должен выполнять эту работу, предоставляя сервис (DeviceIoContro), который проверяет, сопоставлен ли уже диапазон, сопоставляет ли он свободный, и записывает резервирование.Также сервис освобождает область резервирования и снимает ее.И, конечно, вы должны освободить все области, связанные с конкретной ручкой при закрытии.К сожалению, существует небольшая асимметрия в службах отображения / отображения, поскольку служба «отображения» выполняется через DeviceIoControl, поэтому она использует дескриптор, полученный во время CreateFile, но отображаемая область больше напрямую не связана с дескриптором устройства.Конечно, вы можете организовать метод «закрытия» вашего драйвера для автоматизации отображения (ZwUnmapViewOfSection ...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...