64ビットウィンドウで32ビットのサポートを完全に排除する方法はありますか?


2

syswow64全体を完全に無効にしたいです。私の目標はそれを作ることです 不可能 任意の32ビットアプリケーションを実行する、または64ビットWindowsシステムに任意の32ビットDLLをロードする。古い16ビットWindowsアプリケーションと同様に、古い32ビットシステムでもエミュレートできますが、64ビットではこれ以上エミュレートできません。

Linuxでは、カーネルのコンパイル設定で、あるいはいくつかの方法で32ビットエミュレーションを無効にすることができます。 sysctl 設定。しかし、Windowsで何ができるのでしょうか。

どういうわけか可能ですか?

私は、32ビットのプログラム、そしておそらく64ビットのプログラムでも、もう動作しないことを知っていますが、それは私にとって問題ではありません。実は、それが私の目標です。

目標は、64ビットのみのWindows環境で実験することです。その有用性、あるいはそれが必要かどうかについての議論を始めることは 非常にオフトピック ここに。が欲しい 溶液 ではない ディベート


これをする理由は何ですか?なぜあなたは32ビットを無効にしたいのですか?私はあなたが実際にX問題を抱えていると感じています、しかしあなたはYが問題を解決すると思うのであなたは代わりにYを求めています。Xとは何ですか?
Lie Ryan

それが根本的な理由ではありません、なぜあなたは64ビット環境で実験する必要があるのですか?すべてのx86_64 CPUには32ビットコードを実行するネイティブサポートが含まれていますが、これを無効にすることはできません。エミュレーションもモード切り替えもありません。64ビット命令セットは32ビット命令セットのスーパーセットであるため、ネイティブに実行されます。これは、16ビットWindowsアプリケーションとは性質が異なります。これは、メモリ仮想化を持たない別のCPUモード(レガシモード)で実行する必要があるDOSモードです。基本的に、16ビットアプリケーションは別のオペレーティングシステムで実行されていました。
Lie Ryan

1
64ビットに対応していないプログラムが実行されないようにすることで、どのようなメリットが得られると思いますか?
Lie Ryan

@LieRyan残念ながら、この質問は必要ではないかということではありませんでした。この質問は私がどうやってそれに達することができるかについてでした。私はあなたのしたことを正確に避けたいと思ったので、私は私の目標を述べませんでした。 64ビット専用システムの使いやすさについて無意味な議論がしたい場合は、そのような質問をします。残念なことに、私はあなたのコメントに「建設的ではない」と「オフトピック」として署名するというより良い選択肢はありませんでした。さあ、行ってください。
peterh

1
@unforgettableid 1:32/64コードセグメントを混在させて同じアドレス空間に配置することはできません。連携するにはIPCメカニズムを使用する必要があります。 互換性 問題2:32ビットプロセスは、64ビットホストシステムと一緒に実行されている、32ビットdllを大量に使用する必要があります。基本的には、w $の32ビットコピーです。 非常に明確な署名 m $ 4の完全な無能性の4:はい、1プロセスあたり4Gのアドレス空間の制限もあります。
peterh

回答:


2

これを実現する最も簡単な方法は、アプリケーションを通常のユーザーがインストールできないようにすることです。 64ビットアプリケーションのみをインストールした場合は、64ビットアプリケーションのみが実行されます。ただし、Windowsで使用されている32ビットプロセスはもちろんです。

Windowsのコンシューマ版では、「エミュレーション」ではないWoW64サブシステムを無効にすることはできません。で可能です Windowsサーバー 。私はそれが Windows FeatureWindows Server 単純に無効にすることができます。リンク先の記事では、このコマンドについて説明しています。これは、古いバージョンのWindows Serverに固有のバージョンです。


通常のユーザーは、マシンをしっかりとロックしない限り、何もインストールできない場合でも、ポータブルアプリケーションを実行できます。
unforgettableid

3

強引な方法は、 AppInit ロード時に32ビットバージョンがクラッシュするDLL。 32ビットプロセスごとにロードされるため、起動前にすべてクラッシュします。彼らがとにかく32ビットDLLをロードすることを拒否するので64ビットプログラムへの直接的な害はありません、しかしもちろんそれらの32ビットインストーラーは実行を拒否するでしょうなど


素晴らしい解決策(多少ちょっと本当にブルートかもしれません)。そのようなDLLをロードすることを保証できますか 常に
peterh

私はそれが一度うまくいけば、あなたは少なくとも99%の成功を得るだろうと確信しています。考えられる例外:Microsoftのプロセス、の下で実行されているもの SYSTEM アカウントなど
MSalters

たぶんクラッシュは必要ではなかった、ただ exit(0) - ウィンドウAPIと同等?
peterh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.