私のプログラムが主にwin32 APIを使用している場合、Windows XP/Vista/7でAPI呼び出しがエミュレートされていますか?現在のWindowsバージョンではWin32 APIはまだ「ネイティブ」ですか?
答えて
すべての下に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
とは大きく異なります)。
いいえ.Win32 APIの名前が少し変更されています。 Windows APIという名前になっているはずです。実際にエミュレーションモードの1つでコードが実行されていない限り、エミュレートされません。
Windows APIはすでに16ビットとして存在していたため、Win32です。 – RolandTumble
Win16はもともと「Windows API」と呼ばれていました。大きな違いがあったためWin32とWin32という名前が登場しましたが、MicrosoftはWin32(およびソースレベル互換のWin64)を参照するときには「Windows API」という名前を定期的に使用しています。 – ephemient
ジャレッドが命名について語ったこと。これがあなたのものであるかどうかは分かりませんが、64ビットオペレーティングシステムで32ビットプロセスを実行している場合は、エミュレーション(または「サンク」)レイヤーが実行されます。これは、64ビット版のWindowsすべてに当てはまります。
32ビットWindows上で16ビットアプリケーションを実行するVDMは、Thunksを使用してWin16呼び出しをWin32呼び出しに変換します。そうでなければ互換性のない16ビット環境と32ビット環境の間でコールを転送するのに役立つ技術ほどエミュレーションではありません。 MIPSとAlphaのWindowsは、16ビットx86アプリケーションを実行するための*本物の*エミュレーションを持っていましたが、それはx86上のWindowsでは必要ないし、存在しません。 – ephemient
- 1. Win32現在のマシンを読み取るためのネイティブ(APIなど)Geolocation?
- 2. Win32 API GUIプログラミングでのWindows
- 3. Windowsでのネイティブ暗号化ハッシュのネイティブ実装は、.Net Managedバージョンよりもはるかに高速ですか?
- 4. PhoneGap現在のバージョンはBlackBerry OSバージョン5で動作しますか?
- 5. WSHまたは他のネイティブWindowsプログラムからWin32 CreateEvent/SetEventにアクセスする
- 6. 基本的な.NET WindowsフォームはネイティブのWin32コントロールを制御しますか?
- 7. win32およびx64バージョンのネイティブDLLを1つのファイルに含めることはできますか?
- 8. Windowsでは下位レベルとは何か:Cライブラリまたは対応するWin32 APIの機能ですか?
- 9. boost :: interprocess_mutexとWin32ネイティブmutexのパフォーマンスはどうですか?
- 10. 現在のankhsvnバージョンは現在のsvnと互換性がありますか?バージョン
- 11. Windows 7リボンUI Win32 APIコード
- 12. Gradleバージョン1.8が必要です。現在のバージョンは1.9-rc-3です - Androidスタジオ
- 13. ネイティブwin32 GUIプログラミング(C++)またはwxWidgetsを選択しますか?
- 14. 現在のバージョンでは、IRコード経由でLLVMのapiコードを生成する方法は?
- 15. 64ビットWindowsダンプの現在のティックカウントはどこで取得できますか?
- 16. PHPで現在のIISのバージョンを検出するには?
- 17. emacsでは、現在のフレームの現在の行だけをどのように強調表示しますか?
- 18. Windows Phoneの現在のOSバージョンを取得するにはどうすればよいですか?
- 19. 現在のバージョンのOpenGL for Windows C++をインストールするにはどうすればよいですか?
- 20. Windows上のC++にネイティブのXmlReader APIがありますか?
- 21. Windowsで休止状態または中断モードを起動するWin32 APIはありますか?
- 22. 現在のバージョンよりz3
- 23. Win32コンソールアプリケーションまたはCLR - > windowsフォームアプリケーションですか?
- 24. WPFコントロールのネイティブWin32ウィンドウ
- 25. ネイティブWin32アプリケーション用のビジュアルデザイナ
- 26. 文字列テンプレートは現在のjavascriptバージョンではサポートされていません
- 27. 「現在の言語:auto;現在objective-c」とは何ですか?
- 28. protobuf-csharp-portこれらのツールの現在のバージョンはどれですか?
- 29. Windowsでサービスのデフォルトの現在の作業指示先とは何ですか?
- 30. SIGINTはNTネイティブAPIで何を翻訳しますか?
ありがとう、すべて私に非常に教育的。この質問は、.NETと「古い」win32 APIとの関係について私が混乱したことが原因です。私はC++とwin32を使って新しいアプリケーションを書くことを検討していますが、下位互換性のためだけにサポートされているAPIを使用しないようにしたいと考えています。マイクロソフトの –
。NETの実装はWin32の上に座っています。理論的にはこれは変わる可能性があります。しかし、私はそれが起こることはないと思う。たとえそれがあっても、MicrosoftはWin32 APIを永遠にサポートし続けます--Wow32.dll(Windows-on-Windows-32)のおかげでWin16 APIでも動作します。 – ephemient
@ephemient:私はそれに疑問を持ち始めています: - 彼らは将来が.NetとCLRにあると信じているようです。 - VS2010はWPFとMEFベースです。 - 特異性のようなプロジェクトの研究(http://research.microsoft.com/en-us/projects/singularity/)。 - Win7にはXPモードがあります。どの時点でWin32は、OS Xが出てきたときにMac OS XがClassicをサポートする方法をサポートするレガシーモードになるのですか? –