2014-10-30 4 views
0

У меня нет опыта в разработке драйверов. Я хочу получить доступ к атрибуту структуры PEPROCESS. У меня есть указатель, указывающий на объект процесса, полученный с помощью процедуры PsGetCurrentProcess. Я видел уже некоторые веб-описывающие структуру внутренних устройств (атрибуты) декларации, так что я мог бы использовать смещение этих атрибутов, чтобы получить их, что-то вроде:Как я могу получить доступ к атрибуту структуры PEPROCESS?

hprocess = PsGetCurrentProcess(); 
List = (LIST_ENTRY*)((ULONG)hproces + 0x88); //Active Process Link Offset 

Однако этот способ оставить меня в середине проблемы. Я хотел бы сделать сборку этого кода, который мог бы работать на других платформах (например: x86, x86_64) и других версиях Windows (XP, 7, ...); и я полагаю, что это невозможно с этим, потому что смещение не будет одинаковым.

Вопрос: Существует ли для этого не хромое решение? Пример: что-то вроде

List = process->ActiveProcessLink 

или что-то в этом роде.

+0

Было бы предпочтительнее объявлять структуру, а не явно использовать смещение. Это также будет учитывать различия между платформами, если вы используете правильные типы. Невозможно помочь в том, что содержимое недокументированной структуры может измениться в зависимости от версии Windows. (Очевидно, вы не должны этого делать, если у вас есть другой вариант.) –

+0

Спасибо, очень мешочек Гарри. Кажется, у меня есть серьезная проблема. – Ashigaruconyary

+0

@HarryJohnston Объявление структуры может помочь, но не является гарантией успеха. Другие платформы могут добавлять или удалять участников. –

ответ

0

Попробуйте использовать макрос: Pchar CONTAINING_RECORD ( [в] Pchar адрес, [в] TYPE Тип, [в] Pchar поле);