32ビットプログラムで64ビットドライバーを使用する。窓

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

  •  03-07-2019
  •  | 
  •  

質問

これは、プログラミングに関する中途半端な質問です。まず、PCI-Expressカードと32/64ビットドライバーがあります。ターゲットオペレーティングシステムは、Windows 64ビットシステムである必要があります。 Vista64では、すべてのドライバーが64ビットドライバーとして認定される必要があると読みました。これは64ビットオペレーティングシステムでの一般的な制限であり、<!> quot; XP 64 <!> quot;にも適用されます。 Linuxシステムですか?

したがって、簡単にするために、Vista64でPCIeカードに64ビットドライバーを使用し、カード機能を使用するために64ビットDLLの束を持っているとしましょう。反対側には、PCIeデバイスを使用する必要がある大規模なレガシー32ビットexeプログラムがあります。プログラムを64ビットに変換するのは非常に大きな努力です。

では、32ビットプログラムと64ビットドライバーをまとめるために何ができるでしょうか? 32/64ビットのバイナリとDLLを混在させることはまったく不可能だと読みましたが、これは信じがたいことです。 32ビットアプリ内からVista64でドキュメントを印刷できると確信しており、Windowsは何らかの形でこれを64ビットプリンタードライバーにラップします。

役に立ちましたか?

解決

64ビット認証はVistaでのみ必要です。 Windows以外のプラットフォーム用の認証機関はありません。XPまたはWindows Serverが認証をチェックするとは思いません(ただし、確認はできません。使用しているサービスパックによって異なる場合があります)。

Windows API経由でドライバーを使用している場合、問題はないはずです。 Windowsは、カーネルで32 <!> lt;-<!> gt; 64ビットの変換を行います。独自のプロセス内でドライバーをロードしようとしている場合、おそらくそれは不可能です。 Dirkが言うように、独自のプロセス内で実行し、COMサーバーを介して通信する必要があります。ドライバーをより高い特権の実行レベルで実行する必要があり、ユーザーモードからドライバーを呼び出す必要がある場合、どのフープを介してジャンプする必要があるかわかりません。

64ビットDLLが32ビットAPIを提供するか、Windowsが標準ドライバーインターフェイスを提供することを願っています(ディスプレイやネットワークカードのような一般的なI / Oデバイスの場合)。

他のヒント

32ビットアプリケーションはドライバーを直接呼び出しますか? (ドライバー用のシミュレーターを推測しています!)

32ビットと64ビットのdllの間で通信する唯一の方法は、通信を管理するCOMサーバーを記述することです(読み取り:アプリケーション呼び出しまたは64ビットドライバー応答のいずれかをラップする)。

私に噛み付くために戻ってきたもの:このCOMサーバーを最初に書いたとき(そう、私もこのトリックを知る前に多くの眠れない夜を耐えなければならなかった)私は32ビットバージョンの(自動生成)プロキシ/スタブdll。解決策を知る前に、眠れぬ夜が続きました。32ビットと64ビットの両方のプロキシ/スタブDLLを構築します。 32ビット側は32ビット側(この場合はアプリケーション)を処理し、64ビット側は64ビット側(ドライバー)を処理します。 COMは、プロキシ/スタブの異なるバージョンが互いにどのように通信するかを管理します。そして、お使いのシステムにサーバーを登録してください。簡単ですね。

ドライバーの重要なポイントは、ハードウェアの実際の動作を抽象化し、ソフトウェアへの共通インターフェースを提供することだと思います。この場合、PCIeドライバーはWindowsとハードウェアの仲介役として機能できるように64ビットである必要がありますが、32ビットアプリケーションは問題なくデバイスにアクセスできると思います。

あなたが読んだ非互換性が意味するのは、32ビットと64ビットのアセンブリを同じアプリケーションの一部にすることはできないということです。32ビットアプリケーションは一般に 翻訳者としてのみ機能するWoW64を使用して、Windows x64で正常に動作します。

現在問題が発生していますか、それとも仮説的に質問していますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top