Использование IsWow64Process вместо отдельной компиляции

0

Было просто интересно, лучше ли использовать функцию IsWow64Process, чем компилировать ее отдельно для 64 бит os. По-прежнему необходимо изменить смещения некоторых адресов, чтобы программа на самом деле оставалась неизменной.

Теги:
winapi

3 ответа

1
Лучший ответ

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

Обратите внимание, что во многих случаях сделать ваш 64-разрядный код на самом деле не стоит, особенно когда вам нужно отправить 32-битный код, а особенно, в то время как почти все версии Windows позволяют запускать 32-разрядный код. См. Этот ответ для получения более подробной информации.

1

IsWow64Process() сообщает вам, что вы - 32-разрядное приложение, работающее на 64-битной системе. Это не делает вас 64-битным приложением.

0

IsWow64Process не зависит от платформы.

Я определяю ширину бита, глядя на размер std::ptrdiff_t:

constexpr /*remove if compiler does not support*/ unsigned long GetProcessBits()
{
    return sizeof(std::ptrdiff_t) /*size in bytes*/ * 8U;
}

Это вернет 32, если будет работать в 32-битном режиме, а 64 - в режиме 64 бит.

  • 0
    Вопрос имеет тег "winapi", поэтому я думаю, что переносимость не является проблемой.
  • 0
    @ Боян Хрнкас; когда я набросал ответ, в нем был только C ++ в качестве тега. И, кроме того, это Windows , на данный момент.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню