L' API native est une interface de programmation (API) légère utilisée par le noyau et les applications en mode utilisateur de Windows NT . Cette API est utilisée lors des premières étapes du processus de démarrage de Windows NT , lorsque d'autres composants et API ne sont pas encore disponibles. Par conséquent, certains composants Windows, tels que le sous-système d'exécution client/serveur (CSRSS), sont implémentés à l'aide de l'API native. L'API native est également utilisée par des sous-routines, comme celles de kernel32.dll, qui implémentent l' API Windows , sur laquelle repose la plupart des composants Windows.
La plupart des appels d'API natives sont implémentés dans ntoskrnl.exe et exposés en mode utilisateur par ntdll.dll . Le point d'entrée de ntdll.dll est LdrInitializeThunk. Les appels d'API natives sont gérés par le noyau via la table des descripteurs de services système (SSDT).
Groupes fonctionnels
L'API native comprend de nombreuses fonctions. Parmi elles figurent les fonctions d'exécution C nécessaires à une exécution C de base, telles que `strlen()`, `sprintf()`, `memcpy()` et `floor()`. D'autres procédures courantes comme `malloc()`, `printf()` et `scanf()` sont absentes (la première car elle ne spécifie pas de tas pour l'allocation de mémoire, et les secondes et troisièmes car elles utilisent la console, accessible uniquement via `KERNEL32.DLL`). La grande majorité des autres routines de l'API native possèdent, par convention, un préfixe de deux ou trois lettres :
- Les appels système Nt et Zw sont déclarés dans ntdll.dll et ntoskrnl.exe. Appelés depuis ntdll.dll en mode utilisateur, ces groupes sont quasiment identiques : ils exécutent une interruption en mode noyau et appellent la fonction équivalente dans ntoskrnl.exe via le SSDT . Lors d'un appel direct aux fonctions dans ntoskrnl.exe (uniquement possible en mode noyau), les variantes Zw garantissent l'exécution en mode noyau, contrairement aux variantes Nt. Le préfixe Zw n'a pas de signification particulière.
- Rtl est le deuxième groupe le plus important d'appels ntdll. Il s'agit de la bibliothèque d'exécution C (étendue), qui comprend de nombreuses fonctions utilitaires utilisables par les applications natives, mais qui ne nécessitent pas de prise en charge directe par le noyau.
- Les CSR sont des fonctions client-serveur utilisées pour communiquer avec le processus du sous-système Win32, csrss.exe ( csrss signifie sous-système d'exécution client/serveur).
- Les fonctions Dbg sont des fonctions de débogage telles qu'un point d'arrêt logiciel .
- Les Ki sont des appels ascendants du mode noyau pour des événements tels que la répartition APC .
- Les fonctions Ldr sont des fonctions de chargement pour la gestion des fichiers PE et le démarrage de nouveaux processus.
- NLS pour le soutien linguistique national (similaire aux pages de codes).
- Pfx pour la gestion des préfixes.
- Tp pour la gestion du pool de threads.
Les fichiers user32.dll et gdi32.dll contiennent plusieurs autres appels qui exécutent une interruption en mode noyau. Ces appels n'étaient pas prévus dans la conception originale de Windows NT, comme on peut le constater dans Windows NT 3.5 . Cependant, en raison des problèmes de performances du matériel de l'époque, il a été décidé de déplacer le sous-système graphique en mode noyau. Ainsi, les appels système compris entre 0x1000 et 0x1FFF sont gérés par Utilisations