# Windows API

Win16, Win32 et Win32s sont des ensembles normalisés de fonctions qui permettent aux logiciels applicatifs de se servir des fonctionnalités des différents systèmes d'exploitation de la famille Windows. Win32 est l'ensemble de fonctions le plus souvent utilisé, et les programmes dits pour Windows sont généralement des programmes utilisant Win32.
Win32, successeur de Win16, a été introduit en 1993, dans les produits 32 bits de la famille Windows comme Windows NT, Windows 2000, Windows 95 ou leurs successeurs. Cette interface de programmation est mise en œuvre par 3 bibliothèques logicielles : Kernel32.dll, User32.dll et GDI32.dll. Les mêmes fonctions de Win32 sont disponibles dans tous les produits Windows et, suivant le produit, l'utilisation de certaines fonctions peut aboutir à une erreur service non disponible.
Les fonctions de Win32 permettent notamment de manipuler des processus, de communiquer entre programmes, d'exploiter les réseaux informatiques, de manipuler des fichiers, des imprimantes, des serveurs et des ports de communication.
Un kit de développement (SDK) est disponible pour Windows qui fournit la documentation et les outils pour permettre aux développeurs de créer des logiciels en utilisant cette API et les technologies associées.

## Histoire

Les produits Windows parus avant 1993 étaient adaptées aux processeurs 16 bits tels que le Intel 80286 ou ses prédécesseurs. Les éditions de Windows postérieures à cette date sont adaptées aux processeurs 32 bits tels que le Intel 80386 et ses successeurs. Les différences entre ces produits sont notamment la manipulation des pointeurs et l'organisation de l'espace d'adressage.
Le nom Win32 a été donné à l'interface de programmation mise à disposition dans Windows NT et ses successeurs, les éditions 32 bits de Windows, pour la distinguer de la précédente interface Win16 incluse dans les éditions 16 bits (Windows 3.1 et ses prédécesseurs). Win32 offre des fonctions similaires à celles qui existent dans Win16, ainsi qu'un lot de fonctions qui sont couramment mises à disposition par la bibliothèque standard du C.
À ses débuts, Windows NT, première édition 32 bits de Windows, offrait l'interface de programmation de OS/2 Presentation Manager. Puis cette interface a été modifiée en vue de s'approcher de celle qui existait dans les versions précédentes ; cette interface a été baptisée Win32, et son prédécesseur Win16.
Win32s est une interface de programmation qui offre une partie des fonctions de Win32, et est destinée aux programmes pour les produits 16 bits de la série Windows. L'utilisation de certaines fonctions de Win32s peut aboutir à une erreur non disponible.
Lors de la sortie de Windows NT et l'introduction de l'interface Win32, très peu de logiciels applicatifs utilisaient cette technique. Microsoft a équipé Windows NT de plusieurs environment subsystems permettant de l'utiliser pour exécuter des logiciels destinés à MS-DOS, OS/2, Unix (POSIX) ainsi que les précédentes versions de Windows qui implémentent l'interface Win16.

## Technique

Les interfaces de programmation Win16 et Win32 font partie des environment subsystem de produits de la famille Windows. Chaque environnement permet l'exécution de programmes prévus pour un certain type de système d'exploitation : Win32 pour les programmes prévus pour les éditions 32 bits de Windows, Win16 pour les autres éditions (antérieures à 1993), POSIX pour de nombreux programmes prévus pour Unix, ou encore l'environnement pour des programmes destinés à OS/2.
Un environment subsystem est essentiellement un ensemble de bibliothèques logicielles qui exposent les fonctions de l'interface de programmation ainsi qu'un programme qui assure la communication entre le logiciel applicatif et le cœur du système d'exploitation. Les fonctions du noyau du système d'exploitation ne sont pas directement exploitées par les logiciels applicatifs.
Win32 est l'environnement natif de Windows NT et ses successeurs. Les autres environnements s'appuient dessus pour émuler les conditions d'exécution des applications : MS-DOS est pris en charge par le programme VDM pour Virtual DOS machine, Windows 3.1 est pris en charge par le programme WOW pour Windows on Windows, Unix est pris en charge par émulation de l'interface POSIX.
Windows 95, Windows 98 et Windows NT offrent les deux interfaces Win16 et Win32. Lorsqu'une fonction de Win32 est utilisée dans Windows 95, cela entraîne l'utilisation de la fonction Win16 équivalente. Dans Windows NT c'est le contraire : l'utilisation d'une fonction Win16 entraîne l'utilisation de la fonction Win32 équivalente.

## Composant de Windows API

Les fonctionnalités fournies par Windows API peuvent être rangées dans sept catégories :

### Services de base

Donne accès aux ressources fondamentales du système disponibles sous Windows. Exemples : système de fichiers, périphériques, processus, processus léger, accès au registre système et au Système de gestion d'exceptions. Ces fonctions sont stockées dans les fichiers kernel.exe, krnl286.exe ou krnl386.exe pour les systèmes 16-bits et kernel32.dll et advapi32.dll sur les systèmes 32 bits.

### Interface graphique

Permet d'accéder aux ressources pour l'affichage sur les moniteurs, imprimantes, etc. Elle est stockée dans le fichier gdi.exe sur les systèmes 16-bits et gdi32.dll sur les systèmes 32-bits.

### Interface utilisateur

Permet d'afficher et de gérer les contrôles de base comme les boutons et barres de défilement, de recevoir les informations du clavier et de la souris et des fonctionnalités associées comme l'environnement graphique. Ces fonctionnalités sont stockées dans le fichier user.exe sur les systèmes 16-bits, et user32.dll comctl32.dll sur les systèmes 32-bits. Depuis Windows XP, les contrôles ont été regroupés dans comctl32.dll, dédiant user32.dll pleinement aux infrastructures.

### Boîtes de dialogue communes

Permet d'afficher les boîtes de dialogue pour ouvrir et enregistrer des fichiers, choisir la couleur et la police, etc. Elle réside dans le fichier comdlg.dll sur les systèmes 16-bits et comdlg32.dll sur les systèmes 32-bits. Elle a été groupée avec la partie Interface utilisateur.

### Bibliothèque de contrôles communs

Donne accès à des fonctions avancées du système d'exploitation comme des barres de statut (situées au bas des fenêtres), barres de progression, barres d'outils et onglets. Ces commandes résident dans la bibliothèque logicielle commctrl.dll sur les systèmes 16-bits et comctl32.dll. Elle est groupée avec l'interface utilisateur.

### Shell Windows

Le composant de Windows API qui permet à des applications d'accéder aux fonctionnalités fournies par le shell du système d'exploitation. Elle réside dans le fichier shell.dll sur les systèmes 16-bits et shell32.dll sur les systèmes 32-bits, et depuis Windows 95 dans le fichier shlwapi.dll. Elle a été groupée avec la partie Interface utilisateur.

### Services réseau

Donne accès aux diverses possibilités de gestion de réseau du système d'exploitation. Ses sous-composants incluent NetBIOS, Winsock, RPC, etc. Sur les anciennes versions de Windows, cela incluait NetDDE.

### Autres API liées

Internet Explorer offre quelques API qui sont souvent utilisées par les programmes et peut donc être considéré comme une partie de Windows API. Internet Explorer est fourni d'office depuis Windows 98. Il est prévu d'arrêter cette prise en charge avec Vista.
Depuis Windows 95, il y a aussi des API pour les affichages graphiques qui permettent d'avoir accès aux ressources de DirectX.
Il y a aussi d'autres API pour les relations entre les applications comme DDE (Dynamic Data Exchange, Echange dynamique de données), OLE (Object Linking and Embedding) (voir (en) Object Linking and Embedding) et COM (Component Object Model).

## Versions

Chaque version de Windows a apporté son lot de modifications de l'API. Malgré cela, le nom de l'API reste le même sauf pour les modifications majeures. Microsoft a quand même changé le nom Win32 en Windows API pour les contenir dans une seule famille même pour une prochaine modification de celle-ci.
* Win16 était la première API pour les versions 16-bits du système. Elle était au départ simplement nommé Windows API mais a été renommé en Win16 pour permettre le passage au 32-bits de Windows API. Les fonctionnalités étaient principalement dans le noyau du système : kernel.exe (ou krnl286.exe ou krnl386.exe), user.exe et gdi.exe. Malgré l'extension exe, ces fichiers sont des bibliothèques de liens dynamiques.
* Win32 est la version 32-bits de l'API pour les systèmes plus récents. L'api se compose d'implémentations, comme avec Win16, dans le système bibliothèques de liens dynamiques. Le noyau de Win32 réside dans les fichiers kernel32.dll, user32.dll, et gdi32.dll. Win32 a été présenté avec Windows NT. La version embarquée avec Windows 95 était appelée Win32c, avec « c » pour compatibilité (compatibility en anglais) mais ce nom a été abandonné pour Win32. Dans la version Windows NT 4.0 et suivantes, les appels de Win32 sont exécutés par deux modules, csrss.exe (Client/Server Runtime Server Subsystem) en mode utilisateur et win32k.sys en mode noyau.
* Win32s est une extension de Win32 pour les systèmes Windows 3.x qui a été introduite comme sous-ensemble de Win32. Le « s » est pour sous-ensemble (subset en anglais).
* Win32 pour les éditions 64bits précédemment appelée Win64 est la version pour les ordinateurs 64-bits, avec les versions Windows XP Professional x64 Edition pour les processeurs x86-64 ainsi que Windows XP 64-bit Edition et Windows Server 2003 pour les processeurs Itanium. Cette version apporte juste le support pour ces deux nouvelles plateformes.

## Autres implémentations

Bien que Windows API soit soumise aux droits d'auteurs et malgré les précédents légaux aux États-Unis, il est permis d'émuler cette API sur d'autres plateformes.
C'est le cas par exemple de Wine qui émule une API compatible avec Win32 pour les systèmes d'exploitation à base UNIX. Un autre exemple est le système ReactOS.