2009-05-07 11 views

答えて

6

すべての下にWindows NTカーネルがあり、ネイティブのNTアプリケーションは、(主に文書化されていない)NT APIを使用して対話します。

csrss.exe「クライアント/サーバーランタイムサブシステム」は、ユーザーモードのWin32サブシステムを提供するネイティブNTアプリケーションであり、win32k.sysは、カーネルモードのWin32サブシステムを提供します。 Win32アプリケーションは、これらの2つがロードされていなければ実行できません。

smss.exe「セッションマネージャーサブシステム」は、起動時に最初に実行されるアプリケーションです。タスクの1つとして、Win32サブシステムを起動します。

「ネイティブ」とは何ですか?カーネルはWin32をまったく理解していません。すべてのWin32 API呼び出しはランタイムによって処理され、csrssはNT API呼び出しにつながります。しかし、Win32サブシステムなしでWindowsを実行することは決してありません。


Windows用のOS/2およびPOSIXサブシステムもあります。私は彼らが共通して使用されているとは思わない。


あなたがUNIXに精通している場合、ここでは大まかな類推だ:syslog(3)は、ネイティブAPIのですか?

POSIXはその存在を強制します。 libc実行時ライブラリによって「ソケット/パイプに接続してメッセージを送信する」として実装されている可能性があります。これは、syslogdデーモンが実行されていないと機能しません。 syslogdデーモンはinitスクリプトによって起動されます。

これは完全な類推ではありません。多くのアプリケーションはsyslog(3)に依存せず、システムの動作に悪影響を与えずにsyslogdデーモンを停止して再起動することが通常可能です(csrss.exeとは大きく異なります)。

+0

ありがとう、すべて私に非常に教育的。この質問は、.NETと「古い」win32 APIとの関係について私が混乱したことが原因です。私はC++とwin32を使って新しいアプリケーションを書くことを検討していますが、下位互換性のためだけにサポートされているAPIを使用しないようにしたいと考えています。マイクロソフトの –

+1

。NETの実装はWin32の上に座っています。理論的にはこれは変わる可能性があります。しかし、私はそれが起こることはないと思う。たとえそれがあっても、MicrosoftはWin32 APIを永遠にサポートし続けます--Wow32.dll(Windows-on-Windows-32)のおかげでWin16 APIでも動作します。 – ephemient

+0

@ephemient:私はそれに疑問を持ち始めています: - 彼らは将来が.NetとCLRにあると信じているようです。 - VS2010はWPFとMEFベースです。 - 特異性のようなプロジェクトの研究(http://research.microsoft.com/en-us/projects/singularity/)。 - Win7にはXPモードがあります。どの時点でWin32は、OS Xが出てきたときにMac OS XがClassicをサポートする方法をサポートするレガシーモードになるのですか? –

1

いいえ.Win32 APIの名前が少し変更されています。 Windows APIという名前になっているはずです。実際にエミュレーションモードの1つでコードが実行されていない限り、エミュレートされません。

+0

Windows APIはすでに16ビットとして存在していたため、Win32です。 – RolandTumble

+0

Win16はもともと「Windows API」と呼ばれていました。大きな違いがあったためWin32とWin32という名前が登場しましたが、MicrosoftはWin32(およびソースレベル互換のWin64)を参照するときには「Windows API」という名前を定期的に使用しています。 – ephemient

2

ジャレッドが命名について語ったこと。これがあなたのものであるかどうかは分かりませんが、64ビットオペレーティングシステムで32ビットプロセスを実行している場合は、エミュレーション(または「サンク」)レイヤーが実行されます。これは、64ビット版のWindowsすべてに当てはまります。

+1

32ビットWindows上で16ビットアプリケーションを実行するVDMは、Thunksを使用してWin16呼び出しをWin32呼び出しに変換します。そうでなければ互換性のない16ビット環境と32ビット環境の間でコールを転送するのに役立つ技術ほどエミュレーションではありません。 MIPSとAlphaのWindowsは、16ビットx86アプリケーションを実行するための*本物の*エミュレーションを持っていましたが、それはx86上のWindowsでは必要ないし、存在しません。 – ephemient

関連する問題