64/32-разрядный перевод стандартного драйвера в Windows

StackOverflow https://stackoverflow.com/questions/681267

  •  22-08-2019
  •  | 
  •  

Вопрос

Вопрос в основном является продолжением этой темы:Использование 64-разрядного драйвера в 32-разрядной программе.Windows

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

Что неясно, так это то, как автоматический 64<-> 32-разрядный перевод происходит при использовании "стандартного устройства", такого как видеокарта.Любое 32-разрядное приложение под управлением 64-разрядной ОС Windows должно иметь возможность использовать драйвер принтера или рисовать что-либо с помощью GDI с помощью некоторых DLL-файлов Windows.Microsoft каким-то образом должна была выполнить перевод с 32-разрядного на 64-разрядный аппаратный драйвер для видеокарты или принтера.Я знаю, что WoW64 делает это для доступа к реестру и файловой системе, но переводит ли это также на стандартные драйверы?

Конкретный вопрос заключается в том, что если бы у нас был 64-разрядный драйвер WDM для оборудования, мог бы он быть легко использован 32-разрядным приложением, при этом Windows выполняла бы перевод 64<->32?

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top