0

仕様: VC++ 7; プログラムは XP で動作しますが、Win7 ではクラッシュします。VS2003.NETを使用して開発されました(古いことは知っていますが、それは私が使用しなければならないものであり、うまく機能します。ありがとうございました)

XP (32 ビット) で問題なく動作するプログラムがあります。ただし、最近 Win7 でテストしたところ、あらゆる種類の choas が解放されました。私の強い疑いは、私のプログラムがレジストリ キーをどのように処理するかです。

注: プログラムはキーを作成または破棄せず、キーのクエリのみを行い、興味深い値を返します。(「面白い」は後述)

最も単純な形式では、プログラムは SCSI 接続デバイスからデータを読み取り、そのデータをホスト PC 上のファイルに保存します。プログラムはレジストリに SCSI アダプタを照会し、プログラムがデバイスへのアクセスに使用するアダプタ ID を返します。

私には、レジストリ構造が XP から Win7 に変更されたようには見えませんが、100% 確実ではありません。それについての洞察は素晴らしいでしょう:)

また、 http : //www.techsupportalert.com/content/how-windows7-vista64-support-32bit-applications.htm で、Win7 のやり方は反射のようなものだと読みました。これにより、キーのクエリ方法が変わりますか? もしそうなら、クエリを構築する方法に関する情報は素晴らしいでしょう。

私が知る必要があるのは次のことだと思います:

  • RegQueryValueEx メソッドで hKey (または lpValueName) を変更するのと同じくらい簡単ですか?
  • それとも、RegQueryValueEx メソッドの他の側面を変更する必要があるということですか?
  • それともまったく別のものですか?

前もって感謝します!

4

1 に答える 1

0

最初に自分のマシンでApplication Verifierを使用してアプリケーションを実行することをお勧めします。特に興味深いのは、LuaPrivVista または Win-7 ではうまく機能しない操作をアプリケーションが実行しているインスタンスを強調するセクションです。これは、XP とは異なるレジストリの場所を参照している可能性がある場合にいつでもキャッチする必要があります。

注意すべきことの 1 つは、別のアプリケーションによって作成されたレジストリ エントリを読み取る場合、それらが別の場所 (たとえば、32 ビット ビューまたは 64 ビット ビュー) にある可能性があること、またはユーザーごとの場所に仮想化されている可能性があることです。 (これは通常、プロセスがどこにでも書き込み可能であると考えて実行されたが、管理者権限を持っていなかったため、Windows はレジストリ書き込みを仮想領域にサンドボックス化した場合に発生します)。

于 2012-08-06T20:57:10.693 に答える