2010-03-11 3 views
0

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

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

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

EDIT: Я могу воспроизвести сценарий, если я запускаю 2 экземпляра моего приложения с разными флагами. Оба экземпляра могут получить доступ к той же конкретной физической памяти, которая не является частью пространства памяти любого процесса.

ответ

2

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

+0

Моя проблема заключается в том, что я не контролирую, кто обращается к физическому адресу. Я только контролирую свой процесс, но, видимо, какой-то другой процесс или драйвер устройства получают доступ к одному и тому же физическому адресу. – Eldad

+0

О, извините. Я не думал, что вы не можете изменить драйвер. Так что дело намного сложнее. A (небольшая) надежда состоит в том, чтобы предотвратить процесс других пользователей для доступа к устройству, контролируемому драйвером, путем ограничения доступа к общедоступному объекту, который был показан водителю (т. Е. Имя, которое вы используете в CreateFile для записи устройства). –

+0

Но это очень ограниченное решение и вовсе не общее. В любом случае, это не может помешать другим DRVERS DEVICE ошибочно изменять состояние вашего устройства: неправильный драйвер ядра может делать любые плохие вещи :( Много лет назад я столкнулся с подобной проблемой, пока я разрабатывал карту ISA: кто-то был запись на МО-устройстве. Мне пришлось подключить сигнал выбора чипа к линии NMI ЦП, поэтому, когда доступ к памяти карты был доступен, я мог перехватить событие NMI с помощью моего отладчика низкого уровня ... Совсем не легко. –

Смежные вопросы