L'API Win32

 



Windows 95, Windows 98, NT Workstation, NT Server, Windows CE.

Le noyau.
Le système gère différents types d'objets: événements, fichier mappé, fichier, mailslot, mutex, pipe, processus, sémaphore, thread.
Ces objets peuvent être associés avec un descripteur de sécurité ou non.
Les objets sont désignés par des HANDLE. Un handle est géré par la table des handles du processus. L'appel à CloseHandle libère les ressource associée à l'objet.
Les objets peuvent être partagés entre processus s'ils sont nommés ou hérités.

Les processus.
Les variables d'environnement sont accessibles via GetEnvironmentVariable et SetEnvironmentVariable.
Un processus possède un lecteur et un répertoire courant accessible via GetCurrentDirectory et SetCurrentDirectory.
La création d'un processus est assurée par CreateProcess. La priorité d'un processus est assurée via SetClassPriority.

Les threads.
Le thread représente un code à exécuter pour un processus, c'est une fonction. La création se fait par CreateThread.
La priorité d'un thread est assurée via SetThreadPriority.

La mémoire.
L'allocation de la mémoire est assurée par VirtualAlloc et la libération par VirtualFree.
L'état de la mémoire virtuelle est obtenu par GlobalMemoryStatus.

Les fichiers.
Ils sont créés par CreateFile. La lecture se fait via ReadFile et l'écriture par WriteFile.
Les fichiers mappés en mémoire.
Ils sont créés par CreateFileMapping et mappé via MapViewOfFile.

Le tas.
Le tas d'un processus est accessible via GetProcessHeap. La gestion mémoire est faite par HeapAlloc et HeapFree.
La synchronisation des thread.
Elle est assurée par des sections critiques via InitializeCriticalSection, EnterCriticalSection et LeaveCriticalSection.
Il existe la fonction WaitForSingleObject qui attent sur un objet mutex via CreateMutex et ReleaseMutex ou une sémaphore via CreateSemaphore et ReleaseSemaphore ou un évènement via CreateEvent. La modification de données dans un thread peut être assurée par les fonctions InterlockedIncrement, InterlockedDecrement, InterlockedExchange, InterlockedExchangeAdd, InterlockedCompareExchange.

Les bibliothèques de liens dynamiques.
Le point d'entrée est DllMain.
Il comporte 4 cas : DLL_PROCESSUS_ATTACH, DLL_THREAD_ATTACH, DLL_THREAD_DETACH, DLL_PROCESSUS_DETACH.
La fonction DisableThreadLibraryCalls permet les inter blocage en cas de création d'un thread au sein de DllMain.
L'exportation des fonctions et des variables se fait par __declspec(dllexport) et l'import par __declspec(dllimport).

Le stockage local de thread.
Le stockage de données locales à un thread se fait via TlsAlloc, TlsSetValue, TlsGetValue et TlsFree.

Le système de fichiers.
Les lecteurs sont accessibles via GetLogicalDrives, GetLogicalDriveString et GetDriveType.
Les fichiers peuvent être manipulés avec DeleteFile, MoveFile et GetFileAttributes.
La recherche est assurée par FindFirstFile et FindNextFile.

Les exceptions.
Le code peut être protégé contre les terminaisons involontaires via __try, __except et __finally.

Unicode.
Les chaînes de caractères sont gérées sur deux octets pour prendre en compte les jeux de caractères étrangers étendus.
La macro _TEXT est utilisé en mode ANSI et Unicode.


© 2001 Christophe Pichaud. All rights reserved.