問題タブ [wow64]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Windows x64 で Python 2.* x86 (ie32bit) id() 関数が返す最大数は?
id()
Python 2.6 の x86関数が返すことができる最大数は?
上限は、32ビットアプリケーションが認識できるメモリの量でなければならないと思います.2 32、つまり4294967296?
UInt32
(問題とは関係ありませんが、CLS 準拠で十分な C# 型にこの値を適合させる必要Int64
があるため、これで問題ありません。)
しかし、2 GB を超えるメモリを搭載した Windows x64 で 32 GB のメモリを実行している場合、Python インタープリター自体が x86 であっても、Python の関数が 2 32id()
より大きい値を返すことは可能ですか?
私はそれが Python インタープリターのマシンの見方に帰着すると推測しています.WoW64 は 64 ビットのメモリアドレスを 32 ビットのアドレスに変換すると思います.
winapi - WindowsHookEx を設定して、32 ビットから 64 ビットの WM_HOTKEY をブロックする
私たちのアプリケーションは、Windows の「セキュア キオスク モード」で実行する必要があります。さまざまなアクションをブロックするさまざまな方法があります。私たちが行うことの 1 つは、SetWindowsHookEx を使用してホットキーの使用をリッスンし、WH_GETMESSAGE フックを登録し、WM_HOTKEY メッセージが届いたら、それを WM_NULL に変更することです (以下のコードを参照)。これはほとんどの場合うまく機能しますが、最近問題が発見されました。64 ビット マシンでは、ホットキーをリッスンして応答するアプリケーションが 64 ビット アプリケーションである場合、32 ビット アプリケーションではブロックできません。
私たちはこれを解決する方法を見つけようとしていますが、私が考えることができる唯一のオプションは、バックグラウンドで 64 ビット プロセスを生成して、64 ビット アプリケーションのこのフックを処理することです。他の(より単純な)代替手段はありますか?
フックのセットアップ:
GetMsgProc:
memory-management - WoW64でのメモリの管理方法を理解する
32ビットプロセスとして実行する必要があるWebアプリが6つありますが、キャッシュするさまざまなもののためにかなりのメモリが必要です。さまざまな理由から、これを変更するのは簡単ではありません。1つのアプリケーションが2GBを超える必要はありませんが、合計メモリ使用量はこれを超えることになります。変更も簡単ではないさまざまな理由から、これらすべてを16GBのRAMを搭載した64ビットサーバーのペアで実行することを計画しています。これは、すべてのWebアプリケーションを組み合わせたメモリのニーズに十分なメモリです。
これが私の心配です。Windowsは、プロセスごとに仮想アドレススペース、Win32では2GBのユーザースペースと2GBのカーネルスペース、Win64では8TBのユーザースペースと8TBのカーネルスペースを割り当てることを理解しています(ほとんどの場合)。次に、OSは、このアドレス空間のどの部分が物理RAMにマップされるかを処理します。また、WoW64サブシステムが64ビットOSでの32ビットプロセスの実行を処理することも理解しています。WoW64がこれをどのように行うかを十分に理解していないので、さまざまな32ビットプロセスの仮想アドレス空間をマップして、使用可能なすべてのRAMを利用できるようになることを願っていますが、これができないのではないかと心配しています。また、プロセスは、32ビットプロセスエミュレーションのために何らかの方法で「イヤーマーク」が付けられた同じRAMセットを引き続き競合します。
実際の解決策は、ターゲット環境とプロファイルをテストして何が起こっているかを確認することですが、WoW64での物理RAMの管理方法に関するもう少しの情報は安心です。
windows - WOW64 SetLayeredWindowAttributes LWA_ALPHA
次のようなコードを使用して、ダイアログをレイヤードウィンドウとして表示しています。
...そしてすべてが32ビットWindowsでうまく機能します。ただし、WOW64では、使用するPCに応じて、すべてのピクセルが黒く表示されるか、まったく表示されない(透明度がゼロ)結果になります。
64ビットWindows用に4台のテストマシンがあり、2台はNVidia、2台はIntelビデオハードウェアで、すべてWin7を実行しています。また、各ベンダーの最新のビデオドライバーと、Win7で処理される自動更新(とにかく同じドライバー)を試しました。 。)
残念ながら、これらの1つ(NVidia)が実際に透明なピクセルを期待どおりに表示するという事実によって、質問は混乱しています。これは、ビデオドライバーではなく、WOW64の問題であるとは思えませんが、これまでのところ、これらを表示するすべてのマシン症状は64ビットです。
違いがある場合は、MCIコマンドで制御されたビデオを再生するフルスクリーンウィンドウにダイアログが表示されます。また、このビデオに表示される別のダイアログにLWA_COLORKEYオプションを指定してSetLayeredWindowAttributesを使用していますが、そのダイアログに問題はありません。
何か案は...?
java - Javaのダイジェストと外部ユーティリティで異なる結果
WindowsCalculatorファイルのハッシュ値を生成するための簡単なJavaクラスを作成しました。私はを使用してWindows 7 Professional with SP1
います。私は試しJava 6.0.29
ましJava 7.0.03
た。Javaと(多くの!)外部ユーティリティやWebサイトから異なるハッシュ値を取得している理由を誰かに教えてもらえますか?外部はすべて互いに一致し、Javaだけが異なる結果を返します。
.net - レジストリの仮想化をバイパスできません
レジストリにサブキーを作成しましたHKEY_LOCAL_MACHINE\SOFTWARE\MyApp\APIConnector
. 起動したアプリが実行されていないときに、Visual Studio のイミディエイト ウィンドウを使用してこのサブキーを読み込むと、サブキーを読み取ることができます。
しかし、私のアプリケーションが を探すときHKEY_LOCAL_MACHINE\SOFTWARE\MyApp\APIConnector
、それを見つけることができません。見つけることすらできませんHKEY_LOCAL_MACHINE\SOFTWARE\MyApp
。まるで違うみたいだ
ただし、アプリケーションをデバッグ モードで実行していて一時停止すると、まったく同じコードが見つからずHKEY_LOCAL_MACHINE\SOFTWARE\MyApp
、ましてやHKEY_LOCAL_MACHINE\SOFTWARE\MyApp\APIConnector
.
少し調べてみたところ、レジストリの仮想化の犠牲になったようです。そのため、アプリに管理者権限 (UAC ダイアログ) を要求するマニフェストを追加しましたが、レジストリの仮想化はまだ行われています。この問題に関する Microsoft のドキュメントでは、これはあってはならないことであると主張しています。ヘルプ!
java - Windows 2003 と Windows 2008 での Java Web アプリケーションのパフォーマンス
Tomcat で動作する Java Web / SIP アプリケーションがあります。このアプリケーションは、Windows 2003 で 1000 の同時セッションを実行できるようにサイズ設定されており、仮想化環境で 4 GB の RAM と 4 つの vCPU を備えています。
現在、アプリケーションは Windows 2008 に移行されています。Tomcat はまだ 32 ビットであり、アプリケーションは 32 ビット Java でコンパイルされているため、32 ビット アプリケーションです。このセットアップで、私の 2008 年のパフォーマンス。テストは、Windows 2003 で使用していたのと同じように機能していません。CPU 使用率がピークに達し、多くの通話がドロップされています。
ここで次の質問があります。
64 環境で 32 ビット アプリケーションを実行すると、ここで問題を引き起こしている追加の CPU / メモリが必要ですか。
Win 2003 と Win 2008 でパフォーマンスに違いはありますか?
Windows 2008 は 64 ビット環境のため、2003 と比較してより多くの CPU を必要としますか?
windows - WOW64 での HANDLE 作成のトラッピング
サードパーティのバイナリ (ソースなし) の起動が遅い問題をトラブルシューティングしようとしています。これは、64 ビット Windows 7 で実行される 32 ビット アプリケーションです。
起動時に CPU 使用率が 0% でハングしているアプリケーションにデバッガを使用して侵入しましたが、ReadFile
復帰を待っているようです。の最初の引数ReadFile
は、ハンドル値 000000f0 です。windbg の!handle
コマンドは次のことを教えてくれます。
これがどのデバイスに対応しているか知りたいです。ただし、Sysinternals Process Explorer は、プロセス ハンドルのリストにこのハンドルを含めません。
Windbg を使用してすべての呼び出しをトレースしntdll!NtCreateFile
、パスと返されたハンドルを出力しました。このハンドルはそれらの中にありません。kernel32!CreateNamedPipeW
、kernel32!CallNamedPipeW
、および のブレークポイントkernel32!WaitNamedPipeW
がトリガーされることはありません (Process Explorer が path で別のハンドルを表示したため、これは奇妙です\Device\NamedPipe\
)。
参考までに、 Windows x64 でトレースするコマンドNtCreateFile
(akak ) を次に示します。ZwCreateFile
その上で正しい方向に向けてくれたSkywingに感謝します。
タイプの HANDLE は他にどこFile
から来ることができますか? 他の HANDLE 作成関数NtCreateFile
は、実際の syscall に委譲しませんか (そうではないと思います)。
asp.net - ASP.NET 4.0 ワーカー プロセスは、32 ビットと比較して 64 ビットで 5 倍多くのメモリを消費します。
ASP.NET v4.0 アプリケーションを、Win2008 Server x64 オペレーティング システムで実行されている新しいサーバーに移行しました。アプリケーション プールが "32 ビット アプリケーションを有効にする" = False (x64 IIS のデフォルトである必要があります) に設定されている場合、移行された asp.net アプリケーションには問題がないように見えたので、64 ビット モードで実行したままにしました。
その後、ワーカー プロセスが仮想メモリの制限をすぐに超えるため、ユーザー セッションが頻繁に中断されることが判明しました。このため、同じアプリケーションと同じアプリケーション プールを 1 つの変更した設定でテストしました。「32 ビット アプリケーションを有効にする」を True に切り替えて、「WOW64」モードで実行できるようにしました。それ以外はすべてそのままでした。まったく同じユーザー作業シナリオを使用して、両方のモードでワーカー プロセスによって消費されるメモリ量を比較しましたが、結果は少し衝撃的でした。
- ワークロードは約を消費します。WOW64 32 ビット モードで実行中は 150MB
- また、「デフォルト」の 64 ビット ワーカー プロセス モードでは、同じワークロードが約 800MB を消費します。
ワーカー プロセスが 64 ビット モードでより多くのメモリを消費することが起こるかもしれないと予想していましたが、この差は大きすぎます。
このような巨大なメモリへの影響は正常と見なされますか? どういうわけかそれを減らす/修正することは可能ですか?