почему драйверы 32 бит не работают на 64 бит

из прошлых чтений кажется большинство 32-битные драйверы не будут работать на 64-битном.

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

Я прочитала этой статья wiki на x86-64, в которой говорится

Pushes и pops в стеке всегда находятся в 8-байтовых шагах, и указатели имеют ширину 8 байт.

Я вижу, что это, возможно, причина, по которой драйвер 32bit может потерпеть неудачу на 64bit, поскольку он выдает pop (), который появляется в два раза больше данных, чем ожидал драйвер.

то, что я только что упомянул, может быть полностью не в порядке, поскольку я парень с пользовательским пространством, в этом случае или иначе, каковы некоторые практические примеры (код или объяснение непрофессионала), почему 32-битные драйверы терпят неудачу при запуске на 64 бит?

4 ответов


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

драйверы часто касаются перемещения данных между устройствами phyiscal (например, диском) и памятью. Водителю будет предложено перенести X дисковых секторов в память по адресу Y.

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


помните, что драйверы есть, чтобы поговорить с оборудованием. Что делать,если 32-битный код драйвера был загружен в область памяти, которая находится более чем в 4gigabytes от того места, гдеотображенных в память регистров есть? Код драйвера будет строчить в памяти, которая не имеет ничего общего с собой или оборудованием, которое он должен управлять.


процессоры x86-64 не могут запускать 32-битный код в привилегированном режиме (ядро). Режим совместимости доступен только для пользовательского пространства.


мои 2 цента стоит. Microsoft не дает крысам о беспорядке, который он вызывает при выпуске обновлений или исправлений.

особенно о том, что устаревшее оборудование совместимо с ОС поколения x64. Я говорю здесь о множестве научного оборудования, которое имеет только 32-битные драйверы с этим оборудованием, недоступным и неподдерживаемым больше, таким образом, оставляя лаборатории под управлением XP или в лучшем случае 7 x86. Аналогично потребители, как купили биометрические сканеры и различные медицинские оборудование.

путь x64 должен был быть разработан для размещения устаревшего 32-битного оборудования.