2009-03-25 7 views
1

Die Frage ein grundsätzlich folgen auf diesen Thread auf: Using a 64 bit driver in a 32 bit program. Windows64/32 Bit Standard-Treiber Übersetzung in Windows

Wie ich lernte, als ich ein 64-Bit-Treiber verfügen, die über einen Satz von 64-Bit-DLLs verwendet wird Ich kann keinen 32-Bit-Prozess haben, der die DLLs aufruft. Wir verwenden jetzt einige lustige Interpunk-Kommunikation, um dies zu umgehen.

Was ist unklar ist, wie eine automatische 64 < -> 32-Bit-Übersetzung passiert, wenn Sie ein "Standard-Gerät" wie eine Grafikkarte verwenden. Jede 32-Bit-Anwendung unter einem Windows 64-Bit-Betriebssystem sollte in der Lage sein, mithilfe von Windows-DLLs einen Druckertreiber zu verwenden oder etwas mit GDI zu zeichnen. Somehwere Microsoft muss eine Übersetzung von 32 Bit auf den 64-Bit-Hardware-Treiber für die Grafikkarte oder den Drucker machen. Ich weiß, dass WoW64 das für den Registry- und Dateisystemzugriff tut, aber übersetzt es auch zu Standardtreibern?

Die spezifische Frage ist, ob wir einen 64-Bit-WDM-Treiber für die Hardware hatten, könnte dies leicht durch eine 32-Bit-Anwendung verwendet werden, mit Windows-Übersetzung 64 < tun -> 32?

Antwort

2

"Standardgeräte" gelten als "Standard", da Windows selbst die Verantwortung dafür übernimmt. Im Fall von 64-Bit-Windows bedeutet dies, dass es sowohl 64-Bit- als auch 32-Bit-DLLs gibt. Die 32-Bit-DLLs sind speziell und können mit dem 64-Bit-Kernel (einschließlich der Treiber in diesem Kernel) kommunizieren. Im Allgemeinen sprechen die 32-Bit-DLLs nicht mit 64-Bit-DLLs, da es keinen 64-Bit-Prozess gibt, in dem die letzteren DLLs geladen werden könnten.

+0

So könnte es funktionieren, wenn der WDM-Treiber sowohl eine 64 und 32-Bit-Schnittstelle (DLL) bietet? – asdrubael

+0

Ein WDM-Treiber per Definition ist keine DLL. Außerdem wird ein WDM-Treiber im Kernelmodus ausgeführt, während DLLs in einem Benutzermodusprozess ausgeführt werden. Es kann Begleit-DLLs zu dem WDM-Treiber geben, aber das wird für Standardgeräte nicht erwartet. – MSalters

+0

Ok, ich habe das Ganze getestet, indem ich einen 64-Bit-WDM-Treiber mit einer 32-Bit-Anwendung verwendet habe und es hat sofort funktioniert. – asdrubael