ある忘れっぽいプログラマの覚書

忘れっぽい自分のためのプログラム作成に関連したアイデアなどの備忘録

2007年2月6日(火)

[es]とdevice.exeとライトメール

[es]で周辺機器が使えないことが多い理由についての解説。メモリマップは[es]Ver.1.02をProcMemViewerで表示したもの。ちなみにVer.1.50はさらに厳しい状態です。

結局のところdevice.exeが周辺機器用のドライバー(dll)を読み込むための空きがないことがガンです。
リセット直後のdeviceexeのメモリマップはこんな感じで、下は0x00c50000まで変数エリアで使用済み+上は0x00cc0000までDllで占有されている※1ので、実質ドライバをロード可能な空きは448KB(0x70000)だけ。


ちなみにDllで一番空間を取ってるのがライトメールで使われてるこいつ。約2.9MB(0x2e5000)と他とは桁違いのサイズになっています。


当然ながら400KB程度の空きはあっという間に埋まってしまいます。たとえばリセット後、連絡先を起動しただけでこのとおり。


RelocateLMDllを使うとライトメールで使われてるDllを下の方に移動するので※2、、、


元の場所が空いて、ここにドライバがロードできるようになって一件落着となります。


ちなみにUSBドライバ(usbd.dllとか)などMS標準で提供されてるDll(より正確に言えばFILE_ATTRIBUTE_ROMMODULE属性の付いたDll)はロードされるアドレスが固定されているため、ここで書いたような問題は起きません。

※1 WindowsCEではDllは全プロセス同じアドレスに配置されるため、他プロセスが使用しているだけのDllも空間を"占有"してしまう(正確には占有ではなく他のDllが使えないだけですが)
※2 移動したDllがdevice.exeの変数エリアと重なってるが、device.exeが使用することのないDllなので無問題。逆にこのような状態のDllはdevice.exeからは絶対ロードできない。

作成者 ホーミン : 2007年2月6日(火) 20:55 [ コメント : 14]

コメント

親切な説明のおかげでデバイスを認識しにくい原因がわかりました…。
ほんと壊滅的ですね(汗
しかも便利なツール類まで。脱帽です。

投稿者 shinichi  : 2007年2月7日(水) 11:37

RelocateLMDllについですが、
スタートアップのショートカットに登録することで
常にDLLの最適化を自動的に行うことは可能なのでしょうか?
ライトメールのDLLがスタートアップの起動前にロードされていることが前提になると思うのですが、
こちらでは把握できないので、アドバイス願います。

投稿者 i-toys メール [URL]  : 2007年2月8日(木) 09:33

横槍失礼します。

>i-toysさん
RelocateLMDllのスタートアップ登録ですが、
それっぽいエントリとツールをアップしてみました。
(例のesMojiKeyのバグも直ります)
よろしければご覧ください〜。

投稿者 yakou [URL]  : 2007年2月9日(金) 03:57

> shinichiさん
プロセスビューアなどでも同様な情報は取れるのですが、視覚化しないと分かりにくいので。

> i-toysさん
ライトメールが起動していないとRelocateLMDllを実行しても何もしません。ライトメールは立ち上がるのが遅いのでスタートアップにそのままRelocateLMDllを入れると間に合わないと思います

> yakouさん
esMojiKeyとRlocateTodayDllの問題はTodayアイテム自身の問題だと思います。詳細はそちらのエントリで。

投稿者 ホーミン  : 2007年2月10日(土) 18:50

>ホーミンさん
こちらのブログへのコメント、わざわざありがとうございます。
元よりRlocateTodayDllには何の問題もないと思っていたのですが、
あのエントリの内容ではそれが伝わりませんね…。
記事のほうには追記を致しました。
真に申し訳ありませんでした…。

投稿者 yakou [URL]  : 2007年2月12日(月) 04:31

mozurin氏のほうでは、ここのネタを元に別の解決策を提示してるようで。
http://dislife.com/?date=20070208#p02
アニメ絵文字なんぞ使わない私は、こっちを使ってます。参考までに。

投稿者 ごりぽん  : 2007年2月17日(土) 12:47

> yakouさん
ユーザーに対する注意喚起で「RelocateTodayDllを動かすと、、、」と言う事は必要ですし、特に問題ないです。

> ごりぽんさん
まあRelocateLMDllはライトメールに影響しない事を念頭に作ってますからね。
本当は○○○を×××して△△△に□□□すればいいのですが、シャープ著作物をいじって配布するのは問題ありますし。

投稿者 ホーミン  : 2007年2月17日(土) 22:46

伏せ字だらけなのに解ってしまいそうな自分がアレかも。orz
わざわざレスありがとうございます。

投稿者 ごりぽん  : 2007年2月20日(火) 22:39

W-ZERO3の標準メーラーのメニュー拡張DLLを作成し配布しているて、メニューから追加された拡張機能を選択しても動作しないと言う不具合があり、ずっと調査していたのですが原因不明でした。
つい先日、RelocateLMDllとRelocateTodayDLLのおかげでメモリ不足が原因であることがわかりました。
大変助かりました、ほんとホーミンさんのツールには何度助けられていることか…。
本当にありがとうございましたm(_ _)m

投稿者 shinichi [URL]  : 2007年3月3日(土) 00:21

いつもツールをありがたく使わせて頂いております。
今回スタートアップ対応とのことですが、W-ZERO3[es]にて、RelocateLMDllとRelocateTodayDLL併用時に、砂時計で固まり復帰不能となりました。
他に多数のアプリをスタートアップに入れているので原因はこちらなのか判りませんが、取り急ぎ念の為ご報告させて頂きました。

投稿者 unyaten [URL]  : 2007年3月5日(月) 11:22

いつも便利なソフトをありがとうございます。
私もRelocateTodayDLLとRelocateLMDLLをスタートアップに登録し再起動したところ、「ライトメールの強制終了失敗」と英語のエラーメッセージが二つ表示され、その後ほとんど操作できないくらい激重になってしまいました。
私も複数のソフトをスタートアップに登録しているのでどれが悪いかははっきりしませんが、Relocate〜二つを外したところ元に戻りましたので、ご報告します。

投稿者 saisan  : 2007年3月6日(火) 00:49

同じ話題が続いていますので、こちらにコメントさせていただきます。

自分のW-ZERO3[es]で、常駐ソフト等極力すべて外してRelocateTodayDllを実行してみましたが、デバイスの反応が非常に重くなってしまいます。

ZERO3ActionとRelocateLMDllについては、それぞれ単体で起動しても、動作が重くなることはありませんでしたので、私のW-ZERO3[es]では、RelocateTodayDllのみ、動作に問題があるようです。

投稿者 solipt [URL]  : 2007年3月6日(火) 00:57

■RelocateTodayDll V1.01
常駐の有無に関係なく、砂時計のままで完了しません。(背後に隠れると反応が重くなる)
■RelocateLMDll V1.01
スタートアップ実行だと間に合わないようです。
>ライトメール「An invalid argument was encountered」
>エラー「ライトメールの強制終了失敗」

*デバイス:W-ZERO3[es]
*常駐ソフト:MultiKeyHook[PQzII・MenuKeyHelper2・ZERO3Action]、KeyLockSuspender、PowerstatusPlus、AtokChanger

投稿者 つまっち [URL]  : 2007年3月6日(火) 01:33

RelocateLMDllのスタートアップエラーの補足です。
ExecMultiで30秒待機してからRelocateLMDllを実行するように設定したら、
エラーにならずにライトメールが無事置き換わりました。

投稿者 つまっち [URL]  : 2007年3月6日(火) 01:54

コメントを書く

名前(全角20文字まで) *必須:
URL(例:http://www.yahoo.co.jp):
コメント(全角400文字まで) *必須: