さまざまな種類のOS割り込みハンドラーが、前述の「メッセージキュー」にメッセージを配置する必要がありますが、このキューはプロセスアドレス空間内のどこにありますか?割り込みハンドラコードにどのように公開されますか?
Windowsはスレッドに関連付けられています。ウィンドウのある各スレッドには、プロセスのアドレス空間にスレッドキューがあります。OSには、ハードウェアで生成されたイベント用に、独自のアドレス空間に内部キューがあります。OSは、イベントの詳細とその他の状態情報(たとえば、どのウィンドウにフォーカスがあるか)を使用して、ハードウェアイベントをメッセージに変換し、適切なスレッドキューに配置します。
投稿されたメッセージは、ターゲットウィンドウのスレッドキューに直接配置されます。
送信されるメッセージは通常、直接処理されます(キューをバイパスします)。
細部が毛むくじゃらになります。たとえば、スレッドキューはメッセージのリスト以上のものであり、いくつかの状態情報も保持します。一部のメッセージ(WM_PAINTなど)は実際にはキューに入れられていませんが、キューを照会して空になったときに追加の状態情報から合成されます。他のスレッドが所有するウィンドウに送信されたメッセージは、直接処理されるのではなく、実際には受信者のキューに投稿されますが、システムは、呼び出し元の観点からは通常のブロッキング送信のように見せます。これがデッドロックを引き起こす可能性がある場合(循環が元のスレッドに送り返されるため)、陽気さが続きます。
ジェフリー・リッチターの本には、多くの(すべて?)残酷な詳細があります。私のエディションは古いです(高度なウィンドウ)。現在のエディションは、C /C++経由でWindowsと呼ばれているようです。
OSは、メッセージストリームを呼び出し元に合理的(かつ比較的単純)に見せるために多くの作業を行います。
メッセージを「翻訳」するとはどういう意味ですか?TranslateMessage()の呼び出しは実際に何をしますか?
仮想キーメッセージを監視し、キーダウン/キーアップの組み合わせを認識すると、文字メッセージを追加します。TranslateMessageを呼び出さないと、WM_CHARのような文字メッセージを受信できません。
(投稿するのではなく)戻る直前にキャラクターメッセージを送信しているのではないかと思います。チェックしたことはありませんが、WM_CHARメッセージがWM_KEYUPの直前に到着したことを思い出しているようです。
DispatchMessage()によってディスパッチされると、WndProcに到達する前にメッセージはどの場所でスイングしますか(つまり、OSはそれをどのように処理しますか)?
DispatchMessageは、ターゲットウィンドウのWndProcにメッセージを渡します。途中で、いくつかのフックがメッセージを見る機会を得るかもしれません(そしておそらくそれを妨害するかもしれません)。