Я пытался запустить некоторые драйверы, закодированные для 32-разрядной версии Vista (x86), на 64-разрядной версии win7 (amd64), но они не запускались. После долгих отладок и испытаний я заставил его работать над последним, но я не знаю, почему он работает. Вот что я сделал:
Во многих местах указатели буфера указывали на массив структур (разные в разных местах), и для их увеличения в некоторых местах использовался такой тип оператора:
ptr = (PVOID)((PCHAR)ptr + offset);
И в некоторых местах:
ptr = (PVOID)((ULONG)ptr + offset);
Второй возвращал мусор, поэтому я заменил их всех на 1-й. Но я нашел много образцов драйверов в сети после второго. Мои вопросы:
- Где определяются эти макросы (гугл не сильно помог)?
- Я понимаю, что все макросы P_ являются указателями, почему указатель был приведен к ULONG? Как это работает на 32-битной?
- Очевидно, что PCHAR изменяет ширину в зависимости от среды. Вы знаете, где найти документацию для этого?