32Bitシステムの64Bit化

[戻る]
え〜いち 2009/08/21(金) 09:18:26
VC++8.0で開発したWindows Vista/XP/Server 2008で動作保証している32bitのシステム
があります
これを、64BitOS(Windows 7/Server2008R2)で動作保証したいと思います
ここで、構成品目すべてを64Bitでビルドするのは不可能(ソースのないスタティック
ライブラリ等があるため)です
そこで、一部のドライバを64Bit化し、大部分を32bitのままでいけないか?
と検討しています
このときいずれかの方法で、64Bitアプリと32Bitアプリで情報のやり取りができなけれ
ばなりません。
以下のようなことは可能でしょうか?

1)64Bitのアプリケーションと32BitのアプリケーションでSocket通信が可能か?
2)64Bitのアプリケーションと32Bitのアプリケーションで共有メモリが使用できる
か?
3)そのほかで64Bitアプリと32Bitアプリでデータを受け渡すことが可能な方法があり
ますか?できれば、同期がとれる方法だとありがたいです。

最悪の場合は、64Bitアプリと32BitアプリでメッセージをXMLのファイルにして、お互い
に監視する方法でも良いとは考えています

tetrapod 2009/08/21(金) 09:58:19
WoW64 で 32bit App をそのまま動作させるのではだめなの?

え〜いち 2009/08/21(金) 10:15:20
tetrapodさま

WoW64ではデバイスドライバが動作しませんよね
よって、デバイスを使用している部分は64Bitで作成しなければならないと思っておりま
す
ライセンスの管理にUSBのドングルを使用しているのですが、これが動作しませんでした
64BitのSDKにかえる必要があるので、このライセンス判定をしている部分を64Bitの実行
ファイルにして、32Bitのシステムと何らかの方法で通信させたいと思っております

aetos 2009/08/21(金) 10:55:43
> 1)64Bitのアプリケーションと32BitのアプリケーションでSocket通信が可能か?

もちろん可能です。

> 2)64Bitのアプリケーションと32Bitのアプリケーションで共有メモリが
>     使用できるか?

メモリマップドファイルのことであれば使用できるでしょう。

> 3)そのほかで64Bitアプリと32Bitアプリでデータを受け渡すことが可能な方法が
      ありますか?

COM も限定的ながら使用できるようです。

こんな資料がありました。
http://msdn.microsoft.com/en-us/library/aa384203(VS.85).aspx
http://msdn.microsoft.com/en-us/library/bb427430(VS.85).aspx

tetrapod 2009/08/21(金) 11:17:31
何をどこまで [自分で実装している] のかわからないんだが・・・

32bit OS のデバイスドライバは 64bit OS では当然動作しない。
なのでドングルのデバイスドライバは作り直す必要がある。
で、この [ドングルのデバイスドライバ] も自作しているわけ?
それともこのドライバはドングルメーカーから提供を受けているわけ?

ドングルメーカーが 64bit OS 用ドライバを提供してさえいれば、ないしは、
当該ドングルの 64bit OS 用ドライバを自作できれば、
Wow64 の thunk-layer がいろいろ小細工してくれて、その 64bit ドライバを
32bit App から呼び出せるようにしてくれる。
なので、自作アプリの EXE/DLL レベルでは何一つ変更する必要はない。

お客様の便利を考えてインストーラは作り直すといいかもしれないけど・・・

え〜いち 2009/08/21(金) 13:09:58
[[解決]]
aetosさん

回答ありがとうございます
Socket通信ができれば怖いものはないです
COMはネットで調べてだめだと思っていました
今回のシステムのでは解決になりませんが、別のシステムでCOMで構成しているものがあ
るので調査してみます

tetrapodさん

あいまいな表現でしません
ドングルメーカーからドライバとSDK(DLL)が配布されております
んで、ドライバというよりも、SDK(DLL)をリンクするために64Bitに対応する必要が
あると思っておりました
>64bit ドライバを32bit App から呼び出せるようにしてくれる
は知らなかったのですが、ドングルメーカーが64Bitのドライバを32BitのDLLから呼び出
していて、その32BitのDLLをアプリがリンクすればよいとのことですね
”thunk-layer”について調べてみます
情報ありがとうございました

え〜いち 2009/08/21(金) 13:22:32
”thunk-layer”について簡単に調べてみましたが、NT系のOSでは持っていないようです
Windows9Xの際に、32Bitと16BitでOS自体を構成するための仕組みのようですが、間違っ
ていますか?

tetrapod 2009/08/21(金) 13:41:07
Wow64 の 32bit-64bit 変換機構を thunk と呼ぶのか呼ばないのかは
意見が分かれているようだ・・・

Wikipedia では「 Thunk は無い 」と言い切っている
http://ja.wikipedia.org/wiki/WOW64

msdn 関係者が thunk と言っている
http://blogs.msdn.com/tsmatsuz/archive/2009/04/16/64-bit-wow-32bit-system-file-
registry.aspx

まあ何にせよ、普通の [アプリケーションプログラミング] のレベルであれば
・32bit アプリケーションは、本来直接 64bit デバイスドライバを呼べない
・Wow64 と呼ばれる Win64 の機能が、間接的に呼び出す機構を提供している
ので Win64 上でもごく普通に 32bit app が動作する。

Win32 の 32bit app が発行する CreateFile や WriteFile なんかも
結局 wow64 で 64bit な呼び出しに変換されているわけだ。

まずはドングルのメーカーに問い合わせてみるべし。

ku 2009/08/21(金) 15:16:41
うちもドングルを使っているので試してみました。
メーカーのHPから64bit用のドライバをダウンロードし
Windows7Ultimate(64bit)で試したところ
ドライバのインストールができました。

既存の32bit用の簡単なプログラム(ドングルの情報を読み書きするもの)を試したところ
動作することを確認できました。

おそらく tetrapod さんが書かれている何かが(よくわからないけど)
うまくやっているのだろうと思います。

目的が64bit化なら別ですが
64bitドライバがあれば、何もしなくても動く可能性があるということで
え〜いちさんも、まずは試してみてはいかがですか。

え〜いち 2009/08/24(月) 19:03:12
tetrapodさん、kuさん

情報ありがとうございます
ドングルメーカーには問い合わせを行います
tetrapodさんの説明と、kuさんの事例からメーカーが考えてくれているかもしれません
ね
製品寿命を考えて、完全に64bitを意向する必要はないのでメーカーから供給されるもの
だけで済めば助かります

え〜いち 2009/08/25(火) 09:45:44
メーカーから64Bitのドライバをダウンロードして確認してみました
32Bitのアプリケーションの修正を全くしないままで動作しました

え〜いち 2009/08/25(火) 11:24:52
[[解決]]
なぜ動作したのだろう???と調べたところ
64Bitでドライバを開発する際に、32Bitから呼び出されることを考慮して開発できるよ
うです

DeviceIoControl()/IoIs32bitProcess()当たりの関数で調べると情報が出ています

古いスレッドには追加発言できません。