Windows API Windows APIの概要

Windows API

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/04/20 10:09 UTC 版)

64ビットプロセッサ向けのWin64 APIも含める場合は「Windows API」という包括的な名称が正確だが、慣習的にWin32と言えばWin64も含んでいることがある[1]

概要

Windowsオペレーティングシステム (OS) 上で動作するアプリケーションにとって、Windows APIはWindowsの各機能にアクセスするための接点である。そのため、Windows上で動作するアプリケーションを作成できる様々なプログラミング言語・開発環境においてWindows APIを使用する手段が提供されている。特にCC++向けには、Windows SDKにより、<windows.h>をはじめとする多数のヘッダーファイルが公開されている。Microsoft Visual C++のC/C++ランタイムライブラリのうち、OSの機能にアクセスするものは、内部的にWindows APIを用いて実装されている。また、多くの開発環境で、Windows APIを基にした、より高水準のフレームワークが構築されている。これらを通じて、すべてのWindowsアプリケーションは、直接的または間接的にWindows APIを使用している。

Windows APIに属する各APIは、主にDLLに実装されており、C言語形式関数またはCOMインターフェイスとして機能が公開されている。関数の呼出規約はWin32 (x86) の場合に原則としてstdcallを採用する[2][3]など、統一されたインターフェイスで多数のプログラミング言語からの使用を容易なものとしている。

分類

Windows APIの中核となる機能はKernel、User、GDIに分けられる[4]。当初は、それぞれKERNEL.EXE (モードによってはKRNL286.EXE、KRNL386.EXE)、USER.EXE、GDI.EXEに実装されていた。32ビット化されて以降は、KERNEL32.DLL、USER32.DLL、GDI32.DLLに実装されている。Windows 7の新カーネル、MinWinでは、"Virtual DLL"の仕組みが導入され、インターフェイス互換性を維持したうえで実装の整理が行なわれている[5][6]

Kernel
ファイルシステムデバイスプロセススレッドレジストリ例外処理など基盤となる機能
User
ウィンドウの処理、ボタンやスクロールバーなどといった基本的なコントロール、マウス・キーボード入力、その他グラフィカルユーザーインターフェイス (GUI) に関わる機能。
GDI
ディスプレイ・プリンタをはじめとした出力装置への描画機能

現在では、これだけに留まらず、多数のDLLから無数の機能が公開されている。現在、マイクロソフトのドキュメントでは次のように分類している[7]

  • Administration and Management
  • Diagnostics
  • Graphics and Multimedia
  • Networking
  • Security
  • System Services
  • Windows User Interface

なお、この分類では、KernelはDiagnosticsとSystem ServicesそしてSecurityに跨って属し、UserはWindows User Interface、GDIはGraphics and Multimediaに属する。

グラフィックとマルチメディア

DirectX

マイクロソフトはWindows 95/Windows NT 4以降、全てのWindowsにDirectXを用意している。DirectXは主にゲームマルチメディアのためのAPIであるが、Windows Vista以降はDirectX GraphicsがGDIに代わってOSのグラフィックス描画の基盤として昇格されている。Windows OSのバージョンや、サービスパックあるいは機能更新プログラムの適用状況によって、利用可能なAPIやAPIのバージョンが異なる。DirectX APIのうちのいくつかは、ゲームコンソールであるXboxシリーズ(XboxXbox 360Xbox Oneなど)と共通になっている。大半はハードウェアとの通信を仲介するAPIであり、利用するにあたって、DirectX対応ハードウェアおよびデバイスドライバーのインストールが必要となるものも多い。

Direct3D
3Dグラフィックスアクセラレータの操作。当初はWindowsにおけるOpenGLの代替手段でもあったが、Direct3D 12はよりハードウェアに近いローレベルAPIとなり、競合はVulkanである。
DirectDraw
2Dグラフィックスアクセラレータの操作。DirectX 8.0以降、DirectDrawの機能はDirect3Dに吸収された。
DirectX Graphics
DirectX 8.0以降に導入された名称で、Direct3DおよびDirectDrawの統合を意味するものだったが[8]、DirectX 11以降はDXGI/Direct3D/Direct2D/DirectWrite/DirectCompositionの総称となっている[9]
DXGI (DirectX Graphics Infrastructure)
DirectX 10以降、DirectX Graphicsから比較的変化の緩やかな部分はDXGIとしてDirect3Dから分離された。
Direct2D
Direct3D上に構築された高レベル2D描画用API。GDI+の置き換えとなる。
DirectWrite
テキストおよびフォント/フォントグリフを扱う。
DirectCompute
DirectX 11で導入されたGPGPU用のAPIという位置付けだが、実際にはDirect3Dの一部。
DirectSound
低水準なハードウェア(主にサウンドカード)への操作。
DirectMusic英語版
DirectSoundの上位に位置し、音楽(メディアファイルの再生など)を扱う。
DirectX Audio
DirectX 8.0以降に導入された名称で、DirectSoundおよびDirectMusicの統合を意味するものだったが[8]、DirectX 9以降はX3DAudio/XAudio2/XACT/DirectSoundなどの総称となっている[10]
DirectInput
ジョイパッドやゲームパッドからの入力、およびフォースフィードバックを扱う。
XInput
Xbox 360Xbox OneのコントローラーをWindows上で使えるようにするAPI。
DirectPlay英語版
ネットワークなどを介した通信。
DirectShow
汎用的なマルチメディアパイプラインシステム。

DirectX APIはWindows APIの中でも変化が激しいAPIのひとつで、Direct3D RM、DirectDraw、DirectSound、DirectInput、DirectPlay、およびDirectMusicはWindows Vista以降完全な互換機能が用意されず、一部を除いて廃止あるいは代替APIに吸収されている[11][12]

静止画

動画・音声

OpenGL

WGL英語版
OpenGLとWindows (GDI) との連携部分を担当するAPIである。各関数名は接頭辞wglで始まり、<wingdi.h>で宣言されている。なお、Windows SDKに付属するOpenGLヘッダーおよびライブラリにはOpenGL 1.1までの関数しか定義されておらず、したがってOpenGL 1.2以降の機能を使うためには、Khronosから最新のOpenGLヘッダーをダウンロードしたのち、WGLのwglGetProcAddress()関数を用いてハードウェアベンダーが提供するOpenGL ICD (Installable Client Driver) の関数エントリポイントをアプリケーション実行時に取得するなどの作業が必要となる[14]

ネットワーク・インターネット

コンポーネント技術

ネイティブAPI

ネイティブAPIは、Windows NT系においてWindows APIより下位層のAPIである。NT系では、NTネイティブAPI上にサブシステムとしてWin32 APIが実装されている。ただし、DirectXやGDIなどは、ネイティブAPIを介さず、より下位に位置するカーネルと直接やり取りを行う。

.NET Frameworkとの関係

Windowsで動作する.NET Frameworkは、基本的にWin32 APIを用いて実装されている。例えばWindows FormsおよびWindows Presentation Foundation (WPF) はそれぞれ内部的にGDI/GDI+あるいはDirect3Dを利用して構築されたGUIアプリケーションのフレームワークであり、Win32 APIとの相互運用性も確保されている。基本クラスライブラリも、OSの機能にアクセスするものはWindows APIを内部的に利用している。P/InvokeやCOM相互運用によって、.NETアプリケーションからWindows APIを利用することも可能である。

かつて、「Windows Vista以降、WinFXと呼ばれる新しいAPIがWindows APIに代わってネイティブAPIになる(WinFXが最も低水準なAPIとなりWindows APIはそのラッパーとなる)」とアナウンスされたことがあったが、結局撤回され、Windows Vista製品版では従来通りWindows APIがネイティブなAPIとなっている[16]。WinFXの計画は方針転換され、予定されていた機能は.NET Framework 3.0としてリリースされた[17]

実装

Windows APIは名前からも類推できるとおり、主にMicrosoft Windowsに実装されている。その実装はWindowsのバージョン毎に少なからず違いが存在する。たとえばWin32の場合、Win32c、Win32sではごく一部を除きUnicodeに対応していない、セキュリティ対策のアクセス制限が実装されていないなどといった違いが挙げられる。そしてそれは大きく次のように分類することができる。

Win16

Win16は、16ビットプログラム用の実装である。ただし、Win16という語自体はWin32が登場してから用いられるようになったレトロニムである[18]。Win16は大きく2種類に分けられる。

  • Windows 1.0からWindows 3.1までおよびWindows 95/98/Me(9x系)の実装。
  • WOW (Windows on Windows): Windows NTによるWin16サブシステムによる実装。

Win32

Win32は、32ビットプログラム用の実装である。次のように分けられる。

Win32
狭義のWin32は、NT系の実装を指す。
Win32c
9x系の実装。'c'は「compatibility」(互換)の頭文字である。しかし、現在[いつ?]では9xの実装も区別なくWin32と呼ぶ[19]
Win32s
Windows 3.1用の実装。's'は「subset」(サブセット)の頭文字である。Windows 3.1には搭載されておらず、別途入手・インストールする必要がある。
Win32 for Windows CE[20]
Windows CEの実装。文字コードUnicodeのみを使用するなどの点が特徴的である。
WOW64 (Windows on Windows 64)
Win64上でWin32をエミュレーションするサブシステムによる実装。

Windows NTがx86以外のアーキテクチャに移植されたことに伴い、Win32は各種アーキテクチャ向けに移植されている[21]。また、Windows NTではないが、かつてMacintosh用のWin32も存在し、Microsoft Visual C++ 4.0 Cross-Development Edition for Macintoshとしてクロスコンパイラとともに発売されていた[22]。これらアーキテクチャの異なるWin32の間にはソースコード上での互換性がある。

Win64

Win64は、64ビットプログラム用の実装である。2021年3月現在の主流はx64だが、Windows 10ではARM64もサポートされるようになった[23][24][25]

かつてWindows Server 2003およびWindows XPにてIA-64のサポートが始まったが、Windows Server 2008 R2を最後にサポートが打ち切られた[26]

マイクロソフト以外による実装

Windows APIの仕様はWindows SDKのドキュメントやMicrosoft Docs(旧MSDN ライブラリ)で公開されており、それを基にしたMicrosoft Windows以外のWindows APIの実装が存在する。


  1. ^ Windows API index - Win32 apps | Microsoft Docs
  2. ^ __stdcall | Microsoft Docs
  3. ^ x64の場合は__fastcallが採用されている。
  4. ^ チャールズ・ペゾルド『プログラミングWindows第5版』 〈上〉、アスキー、2000年10月。ISBN 978-4756136008 
  5. ^ ASCII.jp:MinWinとVirtual DLLで変わるWindowsカーネル (1/2)|あなたの知らないWindows
  6. ^ ASCII.jp:ARM版Windows 8実現の布石となったWindows 7の「MinWin」 (3/4)|基礎から覚える 最新OSのアーキテクチャー
  7. ^ Overview of the Windows API” (英語) (2009年5月7日). 2009年7月8日閲覧。
  8. ^ a b DirectX 8.0 の紹介 | Microsoft Docs
  9. ^ Getting started with DirectX Graphics - Win32 apps | Microsoft Docs
  10. ^ オーディオのリファレンス | Microsoft Docs
  11. ^ DirectX に関してよく寄せられる質問 | Microsoft Docs
  12. ^ DirectX Frequently Asked Questions - Win32 apps | Microsoft Docs
  13. ^ Windows Multimedia - Win32 apps | Microsoft Docs
  14. ^ OpenGL - Win32 apps | Microsoft Docs
  15. ^ Windows HTTP Services - Win32 apps | Microsoft Learn
  16. ^ 本田雅一の「週刊モバイル通信」
  17. ^ Windows Vistaとは何か?(3/3) - @IT
  18. ^ Petzold, Charles 著、株式会社ロングテール/長尾高弘 訳『プログラミングWindows』 〈上〉(第5版)、アスキー、2000年10月、33頁。ISBN 978-4756136008 
  19. ^ Petzold, Charles 著、株式会社ロングテール/長尾高弘 訳『プログラミングWindows』 〈上〉(第5版)、アスキー、2000年10月、34頁。ISBN 978-4756136008 
  20. ^ Microsoft Announces Visual C++ for Windows CE” (英語). マイクロソフト (1997年4月1日). 2009年1月30日閲覧。
  21. ^ Cross-Platform Application Development in Windows NT” (英語) (2003年12月1日). 2007年7月26日閲覧。
  22. ^ Microsoft Visual C++ 4.0 Cross-Development Edition for Macintosh (Archived Visual C++ Technical Articles)” (英語) (1995年7月). 2007年7月26日閲覧。
  23. ^ Microsoft、ARM64対応のデスクトップ版Windows 10を計画か - エキサイトニュース
  24. ^ マイクロソフト、ARM64向けWindowsアプリの開発と配布を正式サポート - CNET Japan
  25. ^ Windows SDK 10にはARM64用のインポートライブラリファイルなどが含まれており、従来のネイティブデスクトップアプリとUWPアプリを開発できるようになっている。
  26. ^ マイクロソフト、「Itanium」チップのサポートを終了へ - CNET Japan
  27. ^ デスクトップ アプリで Windows ランタイム API を呼び出す - Windows apps | Microsoft Docs
  28. ^ Working with Strings (Windows)” (英語). MSDNライブラリ. マイクロソフト (2010年10月5日). 2011年8月27日閲覧。
  29. ^ Surrogates and Supplementary Characters”. MSDNライブラリ (2009年1月12日). 2010年1月19日閲覧。
  30. ^ Windows XP Professional の多言語オプションの比較”. TechNetライブラリ. 2010年1月19日閲覧。
  31. ^ Unicode in the Windows API”. MSDNライブラリ (2010年1月12日). 2010年1月19日閲覧。
  32. ^ Chen, Raymond (2004年5月31日). “Why is the default 8-bit codepage called "ANSI"?” (英語). The Old New Thing. 2008年1月30日閲覧。
  33. ^ Other Existing Unicode Support” (英語). MSDNライブラリ. 2010年1月19日閲覧。
  34. ^ Microsoft Layer for Unicode Reference” (英語). MSDNライブラリ. 2009年7月31日閲覧。
  35. ^ [WinXP] Common Control 6.0 の EM_LIMITTEXT による入力制限”. サポート技術情報 (2009年9月16日). 2010年1月19日閲覧。
  36. ^ Interprocess Communication Between 32-bit and 64-bit Applications - Win32 apps | Microsoft Docs
  37. ^ Running 32-bit Applications - Win32 apps | Microsoft Docs
  38. ^ 64bit Windows時代到来:第3回 アプリケーションの互換性 (1/3) - @IT
  39. ^ Compatibility and Reliability - Win32 apps | Microsoft Docs
  40. ^ Windowsの互換性テクノロジの仕組み(前編)(1/3) - @IT
  41. ^ 塩田紳二. “.NET「本音」相談室(第1回)Q3:どうしていま、.NETなのか?”. @IT. 2009年7月12日閲覧。
  42. ^ ASCII.jp:UWPからデスクトップアプリに回帰すべく、MSが送り出した「Project REUNION」 (1/2)
  43. ^ System.Windows Namespace | Microsoft Docs
  44. ^ Microsoft.Win32 Namespace | Microsoft Docs


「Windows API」の続きの解説一覧




固有名詞の分類


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「Windows API」の関連用語

Windows APIのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Windows APIのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのWindows API (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2024 GRAS Group, Inc.RSS