2009-03-25 4 views
1

Вопрос в основном следовать до этой теме: Using a 64 bit driver in a 32 bit program. Windows64/32 бит перевод стандартный драйвер в ОС Windows

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

Непонятно, как автоматический 64-разрядный перевод происходит при использовании «стандартного устройства», такого как графическая карта. Любое 32-разрядное приложение под операционной системой Windows 64 Bit должно иметь возможность использовать драйвер принтера или рисовать что-то с помощью GDI с помощью некоторых DLL-файлов Windows. Некоторым Microsoft пришлось сделать перевод с 32-битного на 64-битный аппаратный драйвер для видеокарты или принтера. Я знаю, что WoW64 делает это для доступа к реестру и файловой системе, но также ли он переводит на стандартные драйверы?

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

ответ

2

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

+0

Таким образом, он может работать, если драйвер WDM имеет 64-разрядный и 32-битный интерфейс (DLL)? – asdrubael

+0

Драйвер WDM по определению не является DLL. Кроме того, драйвер WDM работает в режиме ядра, тогда как библиотеки DLL запускаются в режиме пользовательского режима. Возможно, в драйвер WDM могут быть сопутствующие DLL, но этого не ожидалось бы для стандартных устройств. – MSalters

+0

Хорошо, я протестировал все это, используя 64-битный WDM-драйвер с 32-разрядным приложением, и он сразу работал. – asdrubael