Windows API

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

Windows API非公式にWinAPI )は、 Microsoft Windowsオペレーティングシステムで使用できるMicrosoftのアプリケーションプログラミングインターフェイス(API)のコアセットです。Windows APIという名前は、多くの場合、独自の名前で参照されるいくつかの異なるプラットフォーム実装をまとめて指します(たとえば、Win32 API)。バージョンのセクションを参照してくださいほとんどすべてのWindowsプログラムはWindowsAPIと相互作用します。オペレーティングシステムのWindowsNTラインでは、少数(Windowsの起動プロセスの初期に開始されたプログラムなど)がネイティブAPIを使用します。[1]

開発者サポートは、ソフトウェア開発キットであるMicrosoft Windows SDKの形式で利用でき、 WindowsAPIおよび関連するWindowsインターフェイスに基づいてソフトウェアを構築するために必要なドキュメントとツールを提供します。

Windows API(Win32)は、公開されている関数とデータ構造が最近のバージョンのドキュメントでその言語で記述されているという点で、主にプログラミング言語C [2]に焦点を当てています。ただし、APIは、呼び出しとコールバックに規定された呼び出し規約とともに、(明確に定義された)低レベルのデータ構造を処理できるプログラミング言語コンパイラまたはアセンブラで使用できます。同様に、APIの関数の内部実装は、歴史的にいくつかの言語で開発されてきました。[3] Cはオブジェクト指向プログラミングではないという事実にもかかわらず言語、Windows API、およびWindowsはどちらも、歴史的にオブジェクト指向として説明されてきました。このオブジェクト指向構造をより明確にするオブジェクト指向言語用のラッパークラスと拡張機能(Microsoftなど)も多数あります(Microsoft Foundation Class Library(MFC)、Visual Component Library(VCL)、GDI +など)。 。たとえば、Windows8はWindowsAPIとWinRTAPIを提供します。これらは、 C ++ [4]で実装され、設計上オブジェクト指向です。[4]

概要

Windows APIによって提供される機能は、次の8つのカテゴリにグループ化できます。[5]

基本サービス
[6] Windowsシステムで利用可能な基本的なリソースへのアクセスを提供します。ファイルシステムデバイスプロセススレッドエラー処理などが含まれこれらの関数はにありますkernel.exekrnl286.exeまたkrnl386.exe16ビットWindows上のファイル、およびkernel32.dllとKernelBase.dll32ビットおよび64ビットのWindows。これらのファイルはフォルダにあります\ Windows \ System32Windowsのすべてのバージョンで。
高度なサービス
カーネルを超えた機能へのアクセスを提供します。これには、Windowsレジストリ、システムのシャットダウン/再起動(または中止)、 Windowsサービスの開始/停止/作成、ユーザーアカウントの管理などが含まれます。これらの関数はにありますadvapi32.dlladvapires32.dll32ビットWindowsの場合。
グラフィックデバイスインターフェイス
[7]モニタープリンター、その他の出力デバイスにグラフィックコンテンツを出力する機能を提供しますそれはに存在しますgdi.exe16ビットWindowsの場合、およびgdi32.dllユーザーモードの32ビットWindows。win32k.sysグラフィックドライバと直接通信するカーネルモードGDIサポートが提供されます。[8]
ユーザーインターフェース
[9]画面ウィンドウと、ボタンスクロールバーなどの最も基本的なコントロール、マウスとキーボードの入力を受け取る機能、およびWindowsのグラフィカルユーザーインターフェイス(GUI)部分に関連するその他の機能を提供します。この機能ユニットはにありますuser.exe16ビットWindowsの場合、およびuser32.dll32ビットWindowsの場合。Windows XPバージョン以降、基本的なコントロールはcomctl32.dll、共通コントロール(共通コントロールライブラリ)と一緒に。
共通ダイアログボックスライブラリ
[10]アプリケーションに、ファイルを開いて保存したり、色やフォントを選択したりするための標準のダイアログボックスを提供します。ライブラリは、というファイルにあります。commdlg.dll16ビットWindowsの場合、およびcomdlg32.dll32ビットWindowsの場合。これは、APIのユーザーインターフェイスカテゴリにグループ化されています。
共通制御ライブラリ
[11]アプリケーションがオペレーティングシステムによって提供されるいくつかの高度なコントロールにアクセスできるようにします。これらには、ステータスバープログレスバーツールバータブなどが含まれます。ライブラリは、と呼ばれるダイナミックリンクライブラリ(DLL)ファイルにcommctrl.dll16ビットWindowsの場合、およびcomctl32.dll32ビットWindowsの場合。これは、APIのユーザーインターフェイスカテゴリにグループ化されています。
Windowsシェル
[12] [13] Windows APIのコンポーネントを使用すると、アプリケーションはオペレーティングシステムシェルによって提供される機能にアクセスし、それを変更および拡張できます。コンポーネントはに存在しますshell.dll16ビットWindowsの場合、およびshell32.dll32ビットWindowsの場合。ShellLightweightユーティリティの機能は次のとおりです。shlwapi.dllこれは、APIのユーザーインターフェイスカテゴリにグループ化されています。
ネットワークサービス
[14]オペレーティングシステムのさまざまなネットワーク機能へのアクセスを提供しそのサブコンポーネントには、 NetBIOS Winsock NetDDEリモートプロシージャコール(RPC)などがあります。このコンポーネントはに存在しますnetapi32.dll32ビットWindowsの場合。

Web

Internet Explorer (IE)Webブラウザーは、アプリケーションでよく使用される多くのAPIも公開しているため、WindowsAPIの一部と見なすことができます。IEは、Windows 95 OSR2以降、オペレーティングシステムに含まれており、 Windows 98以降、アプリケーションにWeb関連のサービスを提供しています[15]具体的には、以下を提供するために使用されます。

  • に含まれる埋め込み可能なWebブラウザコントロールshdocvw.dllmshtml.dll
  • で開催されたURLモニカサービスurlmon.dllURLを解決するためのCOMオブジェクトをアプリケーションに提供します。アプリケーションは、他のユーザーが使用できる独自のURLハンドラーを提供することもできます。
  • システム全体のプロキシ設定(wininet.dll)も考慮に入れるHTTPクライアントライブラリ。ただし、Microsoftはwinhttp.dllと呼ばれる別のHTTPクライアントライブラリを追加しました。これは、より小さく、一部のアプリケーションにより適しています。
  • 多言語および国際的なテキストサポートを支援するライブラリ(mlang.dll)。
  • DirectX Transforms、画像フィルターコンポーネントのセット。
  • XMLサポート(MSXMLコンポーネント、msxml * .dll)。
  • Windowsアドレスブックへのアクセス。

マルチメディア

従来のWindowsマルチメディアAPIはwinmm.dllに配置されており、サウンドファイルの再生、MIDIメッセージの送受信、ジョイスティックへのアクセス、およびWindowsのいわゆるMCIサブシステムの他のすべての機能を容易にする機能が含まれています。マルチメディア拡張機能は、Windows 3.0で個別に使用でき、Windows 3.1以降、オペレーティングシステムの不可欠な部分として使用できます。このとき、それらはmmsystem.dllにありました。

それとは別に、Windows 95 OSR2以降のすべてのWindowsバージョンの一部として、MicrosoftはDirectX APIを提供しています。これは、以下を含む、ゆるやかに関連するグラフィックスおよびゲームサービスのセットです。

  • ハードウェアアクセラレーションによる2Dベクターグラフィックス用のDirect2D 。
  • ハードウェアアクセラレーションによる3Dグラフィックス用のDirect3D 。
  • 低レベルのハードウェアアクセラレーションサウンドカードアクセス用のDirectSound 。
  • ジョイスティックやゲームパッドなどの入力デバイスと通信するためのDirectInput 。
  • マルチプレイヤーゲームインフラストラクチャとしてのDirectPlay 。このコンポーネントはDirectX9で非推奨になり、Microsoftはゲーム開発での使用を推奨しなくなりました。
  • 以前のDirectXバージョンの2Dグラフィックス用のDirectDrawは、非推奨になり、Direct2Dに置き換えられました。
  • Windows3.xバージョン用に作成された16ビットゲームの2Dグラフィックス用のWinG 。Windows95リリースで非推奨になりました。

Microsoftは、メディアのエンコードと再生用にいくつかのAPIも提供しています。

  • DirectShowは、一般的なマルチメディアパイプラインを構築して実行します。これはGStreamerフレームワークに匹敵し、ゲーム内ビデオのレンダリングやメディアプレーヤーの構築によく使用されます(Windows Media Playerはそれに基づいています)。DirectShowはゲーム開発には推奨されなくなりました。
  • Media Foundation、DirectShowを置き換えることを目的とした新しいデジタルメディアAPI。

プログラムの相互作用

Windows APIは、主にオペレーティングシステムとアプリケーション間の相互作用のために設計されています。さまざまなWindowsアプリケーション間の通信のために、MicrosoftはメインのWindowsAPIとともに一連のテクノロジを開発しました。これは、Dynamic Data Exchange (DDE)で始まり、 Object Linking and Embedding(OLE)に取って代わられ、その後、 Component Object Model(COM)、Automation ObjectsActiveXコントロール、および.NETFrameworkに取って代わられました。これらのテクノロジーには必ずしも明確な違いはなく、多くの重複があります。

さまざまな用語は、基本的に、ソフトウェア開発の特定の側面に関連するソフトウェアメカニズムをグループ化した結果です。自動化は、特にアプリケーションまたはコンポーネントの機能を(アプリケーションプログラミングインターフェイス(API)として)エクスポートして、人間のユーザーだけでなく他のアプリケーションで制御できるようにすることを目的としています。.NETは、自己完結型の一般的な方法論およびテクノロジです。さまざまなジャストインタイム(JIT)コンパイル済み言語 で記述されたデスクトップおよびWebアプリケーションを開発します。

Windows.pasは、 Windows固有のAPI宣言を含むPascal / Delphiユニットです。これは、 Cで使用されるwindows.hに相当するPascalです。 [16]

ラッパーライブラリ

さまざまなラッパーがMicrosoftによって開発され、Windows APIのより低レベルの機能の一部を引き継ぎ、アプリケーションがより抽象的な方法でAPIと対話できるようにしました。Microsoft Foundation Class Library(MFC)は、WindowsAPI機能をC ++ クラスでラップしているため、よりオブジェクト指向の方法でAPIを操作できます。Active Template Library(ATL)は、COM用のテンプレート指向のラッパーですWindowsテンプレートライブラリ(WTL)は、ATLの拡張として開発され、MFCのより小さな代替手段として意図されていました。

Windows用のほとんどのアプリケーションフレームワークは(少なくとも部分的に)WindowsAPIをラップします。したがって、.NET FrameworkJavaは、 Windowsで の他のプログラミング言語と同様に、ラッパーライブラリです(または含まれています)。

歴史

Windows APIは、常にWindowsシステムの基盤となる構造の大部分をプログラマーに公開してきました。これには、アプリケーションに対して多くの柔軟性とパワーを与えるという利点がありましたが、グラフィカルユーザーインターフェイスに関連付けられたさまざまな低レベルの、時には面倒な操作をアプリケーションが処理する方法にも大きな責任があります

たとえば、初心者のCプログラマーは、最初の割り当てとして単純な「helloworld」を作成することがよくあります。プログラムの動作部分は、メインサブルーチン内の単一のprintf行のみです。標準I / Oライブラリにリンクするためのオーバーヘッドも1行だけです。

#include <stdio.h> 

int main void {  
    printf "Hello、World!\ n " );
}

Windowsバージョンは、まだ1行のコードしか機能していませんでしたが、さらに多くのオーバーヘッド行が必要でした。WindowsAPIのプログラミングに関する本を何冊か書いたCharlesPetzoldは、次のように述べています。さらに20行ほどありました。(...)ベテランのプログラマーは、Windowsのhello-worldプログラムに遭遇したときに、恐怖や笑い声で丸まってしまうことがよくありました。」[17]

何年にもわたって、Windowsシステムにさまざまな変更や追加が行われ、Windows APIはこれを反映するように変更され、成長しました。[18] Windows1.0用のWindowsAPIは450未満の関数呼び出しをサポートしていましたが、最新バージョンのWindowsAPIは数千をサポートしています。ただし、一般的に、インターフェイスはかなり一貫性があり、古いWindows 1.0アプリケーションは、最新のWindowsAPIに慣れているプログラマーには馴染みがあるように見えます。[19]

Microsoftは、下位互換性を維持するために努力してきましたこれを実現するために、Windowsの新しいバージョンを開発するときに、Microsoftは、文書化されていない、または推奨されない方法で以前のバージョンを使用したサードパーティソフトウェアとの互換性を可能にする回避策を実装することがありました。WindowsAPIに取り組んでいるMicrosoft開発者のRaymondChenは、次のように述べています。そのため、OSのアップグレード中にMicrosoftが悪意を持ってアプリケーションを壊したと非難されると、特に激怒します。Windows95でアプリケーションを実行できなかった場合は、個人的な失敗と見なしました。」[20]

Windows APIへの最大の変更の1つは、Win16(Windows 3.1以前で出荷)からWin32(WindowsNTおよびWindows95以降)への移行でした。Win32は元々WindowsNT 3.1で導入され、 Win32はWindows 95より前にWin32サブセットの使用を許可していましたが、Win32へのアプリケーションの広範な移植が開始されたのはWindows95まででした。移行を容易にするために、Windows 95では、Microsoftの内外の開発者に対して、32ビットコードが16ビットコード(ほとんどのWin16 API)を呼び出すことができるAPIサンクの複雑なスキームが使用されました。フラットサンク32ビットコードが16ビットライブラリを呼び出すことを許可し、OS全体を1つのバッチでWin32に移植することを回避するために、このスキームはWindows95のライブラリ内で広く使用されました。Windows NTでは、OSは16ビットアプリケーションとの互換性のための部分を除いて純粋な32ビットであり、Windows 95の場合と同様に、Win16からWin32へのサンクには汎用サンクのみが使用可能でした。PlatformSDKには、これらのサンクに必要なコード。64ビットWindowsのバージョンは、 WoW64を介して32ビットアプリケーションを実行することもできますOSドライブのWindowsフォルダにあるSysWOW64フォルダには、32ビットアプリケーションをサポートするためのツールがいくつか含まれています。[要出典]

バージョン

Microsoft Windowsのほぼすべての新しいバージョンでは、WindowsAPIに独自の追加と変更が導入されています。[21]ただし、APIの名前は異なるWindowsバージョン間で一貫しており、名前の変更はWindowsの主要なアーキテクチャとプラットフォームの変更に限定されていました。Microsoftは最終的に、当時のWin32APIファミリの名前をWindowsAPIに変更し、過去と将来の両方のAPIバージョンの包括的な用語にしました。[5]

その他の実装

Wineプロジェクトは、 LinuxカーネルAPIとWindows API用に記述されたプログラムの間に、 UnixライクなプラットフォームWin32API互換性レイヤーを提供します。ReactOSはさらに一歩進んで、完全なWindowsオペレーティングシステムを実装し、Wineプロジェクトと緊密に連携して、コードの再利用と互換性を促進することを目指しています。DosWin32およびHXDOS Extenderは、Windows APIをエミュレートして、 DOSコマンドラインから単純なWindowsプログラムを実行できるようにする他のプロジェクトです。Odinは、 OS / 2でWin32をエミュレートするプロジェクトです。、Microsoftコードに基づいた元のWin-OS / 2エミュレーションに取って代わります。その他のマイナーな実装には、DOSでWin16 APIのサブセットを実装することを目的としたMEWELおよびZincライブラリが含まれます(プラットフォームに依存しないGUIライブラリのリストを参照)。

Windowsインターフェイスソース環境(WISE)は、開発者がUnixおよびMacintoshプラットフォームでWindowsベースのアプリケーションを再コンパイルして実行できるようにするMicrosoftのライセンスプログラムでした。WISE SDKは、これらのプラットフォームで実行できるWindowsAPIのエミュレーターに基づいていました。[26]

標準化に向けた取り組みには、Win16用のSunのパブリックWindowsインターフェイス(PWI)(Sun Windowsアプリケーションバイナリインターフェイス(Wabi)も参照)、Win16およびWin32用のWillows SoftwareのWindows用アプリケーションプログラミングインターフェイス(APIW)(Willows TWINも参照)が含まれます。 ECMA-234は、WindowsAPIを拘束力を持って標準化しようとしました。

コンパイラサポート

Windows APIを使用するソフトウェアを開発するには、コンパイラが上記のMicrosoft固有のDLLを使用できる必要があります(COMオブジェクトはWin32の外部にあり、特定のvtableレイアウトを想定しています)。コンパイラは、内部API関数名を公開するヘッダーファイルを処理するか、そのようなファイルを提供する必要があります。

言語C ++の場合、Zortech(後のSymantec、次にDigital Mars)、Watcom、およびBorlandはすべて、Win16、Win32s、およびWin32で頻繁に使用される有名な商用コンパイラを作成しました。それらのいくつかはメモリエクステンダーを提供し、Microsoftの再配布可能なWin32sDLLを使用してWin16でWin32プログラムを実行できるようにしました。Zortechコンパイラは、MicrosoftがC ++コンパイラを導入する前は、おそらくWindowsプログラミング用の最初の安定した使用可能なC ++コンパイラの1つでした。

特定のクラスのアプリケーションの場合、コンパイラシステムはインターフェイス記述言語(IDL)ファイルも処理できる必要があります。これらの前提条件(コンパイラ、ツール、ライブラリ、およびヘッダー)を総称して、Microsoft PlatformSDKと呼びます。しばらくの間、Microsoft Visual StudioBorlandの統合開発システムは、これを提供できる唯一の統合開発環境(IDE)でした(ただし、SDKは、 Microsoft Windows SDK for Windowsから、IDEスイート全体とは別に無料でダウンロードできます。 7および.NETFramework 4)。

2016年の時点で、MinGWおよびCygwinプロジェクトは、スタンドアロンヘッダーファイルセットを使用して、 GNUコンパイラコレクション(GCC)に基づくこのような環境も提供し、Win32固有のDLLへのリンクを簡単にします。LCC-Win32は、Jacob Naviaによって保守されているCコンパイラであり、非営利目的のフリーウェアです。Pelles Cは、PelleOriniusによって保守されているフリーウェアのCコンパイラです。Free Pascalは、WindowsAPIをサポートするフリーソフトウェアの ObjectPascalコンパイラです。MASM32パッケージは、Microsoft MacroAssemblerでWindowsAPIのサポートを提供する成熟したプロジェクトです(MASM)PlatformSDKのカスタムメイドまたは変換されたヘッダーとライブラリを使用します。フラットアセンブラFASMを使用すると、Linuxで実行している場合でも、外部リンカーを使用せずにWindowsプログラムを構築できます。

構造化例外処理(SEH)には、Windows固有のコンパイラサポートも必要です。このシステムは2つの目的を果たします。言語固有の例外処理を実装できる基盤を提供することと、カーネルが無効なポインターの逆参照やスタックオーバーフローなどの例外条件をアプリケーションに通知する方法です。Microsoft / Borland C ++コンパイラは、Windows 95およびNTに導入されるとすぐにこのシステムを使用できるようになりましたが、実際の実装は文書化されておらず、Wineプロジェクトと無料のコンパイラ用にリバースエンジニアリングする必要がありました。SEHは、例外ハンドラフレームをスタックにプッシュし、スレッドローカルストレージに格納されているリンクリストに追加することに基づいています。(スレッド環境ブロックの最初のフィールド)。例外がスローされると、カーネルライブラリとベースライブラリは、発生したハンドラとフィルタを実行しているスタックを巻き戻します。最終的に、アプリケーションによって処理されないすべての例外は、Windowsの一般的なクラッシュダイアログをポップアップするデフォルトのバックストップハンドラーによって処理されます。

も参照してください

メモ

  1. ^ Microsoft TechNet(2006年11月)。ネイティブアプリケーションの内部。2008年12月24日取得。
  2. ^ 「チュートリアル:Windowsデスクトップアプリケーション(C ++)の作成」msdn.microsoft.com
  3. ^ Cが支配的になる前は、 Pascalx86アセンブリの両方の言語が以前のバージョンのWindowsAPIで頻繁に使用されていました。これを思い出させるのは、API関数が引き続きPascal呼び出し規約を使用して、呼び出し後にプッシュされたパラメーターからスタックを復元することです(ただし、ほとんどのCコンパイラーがデフォルトで行うように、パラメーターは右から左にプッシュされることを期待しています)。
  4. ^ a b メイベリー、マイケル(2012)。WinRTが明らかになりました。ニューヨーク市:Apress。p。3. ISBN 978-1-4302-4585-8
  5. ^ a b Microsoft Developer Network(2005年7月)。WindowsAPIの概要。2005年8月28日取得。
  6. ^ Microsoft Developer Network(2005年7月)。基本サービス。2005年8月28日取得。
  7. ^ Microsoft Developer Network(2005年7月)。グラフィックデバイスインターフェイス。2005年8月28日取得。
  8. ^ 「G」Microsoft DeveloperNetwork 2009年1月28日取得
  9. ^ Microsoft Developer Network(2005年7月)。ユーザーインターフェース。2005年8月28日取得。
  10. ^ Microsoft Developer Network(2005)。共通ダイアログボックスライブラリ。2005年9月22日取得。
  11. ^ Microsoft Developer Network(2005年7月)。共通制御ライブラリ。2005年8月28日取得。
  12. ^ Microsoft Developer Network(2005年7月)。Windowsシェル。2005年8月28日取得。
  13. ^ Microsoft Developer Network(2005)。シェルプログラマーガイド。2005年8月28日取得。
  14. ^ Microsoft Developer Network(2005年7月)。ネットワークサービス。2005年8月28日取得。
  15. ^ Microsoft Developer Network(2006年1月); ブラウザのプログラミングと再利用2006年1月22日取得。
  16. ^ Texeira、SteveおよびXavier Pacheco(2002)。Borland Delphi6開発者ガイドサムズ。p。253. ISBN 0672321157
  17. ^ チャールズペッツォルド(2001年12月)。C#を使用したMicrosoftWindowsのプログラミングMicrosoftPress。コンソールを超えて、47ページ。
  18. ^ XPから10へのWindowsAPIの変更の詳細な分析。2016年9月8日取得。
  19. ^ チャールズペッツォルド(1998年11月11日)。プログラミングウィンドウズ、第5版MicrosoftPress。APIとメモリモデル、9ページ。
  20. ^ レイモンドチェン(2003年10月15日)。BOZOSLIVEHEREとTABTHETEXTOUTFORWIMPSはどうですか?2005年8月27日取得。
  21. ^ イズランプロジェクト(1996–2001)。WindowsAPIの歴史。2005年10月7日取得。
  22. ^ リリースされた64ビットバージョンの命名法には、Windows Server2003のWindowsXP Professional x64Editionおよびx64Edition、x86-64(AMD64)プラットフォーム上のWindowsVistaおよびWindowsServer 2008、およびWindows 2000 Server Limited Edition、 Windows XP64ビットが含まれます。 Edition 、 IA-64プラットフォーム上のItanium用のWindows Advanced Server2003およびItanium用のWindows2008 Advanced Server
  23. ^ 「WindowsXPProfessional x64Editionホームページ」マイクロソフト。
  24. ^ 「Microsoft64ビットコンピューティングの概要」マイクロソフト。
  25. ^ 「MSDN:64ビットWindowsの準備」マイクロソフト。
  26. ^ ウェイバックマシンで2008年3月30日にアーカイブされたWISE

外部リンク