Objets de noyau

Les handles d’objet de noyau sont spécifiques au processus. Autrement dit, un processus doit créer l’objet ou ouvrir un objet existant pour obtenir un handle d’objet de noyau. La limite par processus sur les handles de noyau est de 2 ^ 24. Toutefois, les handles étant stockés dans la réserve paginée, le nombre réel de handles que vous pouvez créer est basé sur la mémoire disponible. le nombre de descripteurs que vous pouvez créer sur les Windows 32 bits est nettement inférieur à 2 ^ 24.

Tout processus peut créer un nouveau descripteur vers un objet de noyau existant (même créé par un autre processus), à condition que le processus sache le nom de l’objet et dispose d’un accès de sécurité à l’objet. Les handles d’objet de noyau incluent des droits d’accès indiquant les actions qui peuvent être accordées ou refusées à un processus. Une application spécifie des droits d’accès quand elle crée un objet ou obtient un handle d’objet existant. Chaque type d’objet de noyau prend en charge son propre ensemble de droits d’accès. Par exemple, les handles d’événements peuvent avoir un accès set ou Wait (ou les deux), les descripteurs de fichiers peuvent avoir un accès en lecture ou en écriture (ou les deux), et ainsi de suite. Pour plus d’informations, consultez objets sécurisables.

Dans l’illustration suivante, une application crée un objet d’événement. La fonction CreateEvent crée l’objet d’événement et retourne un handle d’objet.

application créant un objet d’événement

Une fois l’objet d’événement créé, l’application peut utiliser le descripteur d’événement pour définir ou attendre l’événement. Le descripteur reste valide jusqu’à ce que l’application ferme le handle ou se termine.

La plupart des objets de noyau prennent en charge plusieurs descripteurs sur un seul objet. Par exemple, l’application de l’illustration précédente peut obtenir des descripteurs d’objets d’événement supplémentaires à l’aide de la fonction OpenEvent , comme indiqué dans l’illustration suivante.

application créant un objet d’événement avec plusieurs handles

Cette méthode permet à une application d’avoir des handles avec des droits d’accès différents. Par exemple, le handle 1 peut avoir défini et attendre l’accès à l’événement, et le handle 2 peut avoir uniquement un accès en attente.

Si un autre processus connaît le nom de l’événement et possède un accès de sécurité à l’objet, il peut créer son propre handle d’objet d’événement à l’aide de OpenEvent. L’application de création peut également dupliquer l’un de ses descripteurs dans le même processus ou dans un autre processus à l’aide de la fonction DuplicateHandle .

Un objet reste en mémoire tant qu’il existe au moins un handle d’objet. Dans l’illustration suivante, les applications utilisent la fonction CloseHandle pour fermer leurs handles d’objet d’événement. En l’absence de descripteurs d’événements, le système supprime l’objet de la mémoire, comme indiqué dans l’illustration suivante.

handles d’objet d’événement de fermeture d’application pour supprimer un objet de la mémoire

Le système gère les objets de fichiers différemment des autres objets de noyau. Les objets fichier contiennent le pointeur de fichier (le pointeur vers l’octet suivant à lire ou écrire dans un fichier). Chaque fois qu’une application crée un nouveau descripteur de fichier, le système crée un objet de fichier. Par conséquent, plusieurs objets fichier peuvent faire référence à un seul fichier sur le disque, comme indiqué dans l’illustration suivante.

plusieurs objets fichier faisant référence à un fichier sur le disque

Seul la duplication ou l’héritage peut faire référence au même objet de fichier, comme indiqué dans l’illustration suivante.

deux handles de fichiers font référence au même objet de fichier

Le tableau suivant répertorie chacun des objets de noyau, ainsi que les fonctions de création et de destruction de chaque objet. Les fonctions Creator créent l’objet et un handle d’objet, ou créent un handle d’objet existant. Les fonctions de destruction ferment le descripteur d’objet. Quand une application ferme le dernier descripteur d’un objet de noyau, le système supprime l’objet de la mémoire.

Objet de noyau Creator, fonction Fonction Destroy
Access token (Jeton d’accès) CreateRestrictedToken, DuplicateToken, DuplicateTokenEx, OpenProcessToken, OpenThreadToken CloseHandle
Notification de modification FindFirstChangeNotification FindCloseChangeNotification
Appareil de communication CreateFile CloseHandle
Entrée de la console CreateFile, avec CONIN $ CloseHandle
Mémoire tampon d’écran de la console CreateFile, avec CONOUT $ CloseHandle
Bureau GetThreadDesktop Les applications ne peuvent pas supprimer cet objet.
Événement CreateEvent, CreateEventEx, OpenEvent CloseHandle
Journal des événements OpenEventLog, RegisterEventSource, OpenBackupEventLog CloseEventLog
Fichier CreateFile CloseHandle, DeleteFile
Mappage de fichiers CreateFileMapping, OpenFileMapping CloseHandle
Rechercher un fichier FindFirstFile FindClose
Segment de mémoire (heap) HeapCreate HeapDestroy
Port de terminaison d’e/s CreateIoCompletionPort CloseHandle
Travail CreateJobObject CloseHandle
Mailslots CreateMailslot CloseHandle
Notification de ressource mémoire CreateMemoryResourceNotification CloseHandle
Module LoadLibrary, GetModuleHandle FreeLibrary
Mutex CreateMutex, CreateMutexEx, OpenMutex CloseHandle
Pipe CreateNamedPipe, CreatePipe CloseHandle, DisconnectNamedPipe
Process CreateProcess, OpenProcess, GetCurrentProcess CloseHandle, TerminateProcess
Semaphore CreateSemaphore,, CreateSemaphoreEx, OpenSemaphore CloseHandle
Prise Socket, accepter opération closesocket
Thread CreateThread, CreateRemoteThread, GetCurrentThread CloseHandle, TerminateThread
Minuterie CreateWaitableTimer, CreateWaitableTimerEx, OpenWaitableTimer CloseHandle
Mettre à jour une ressource BeginUpdateResource EndUpdateResource
Station Windows GetProcessWindowStation Les applications ne peuvent pas supprimer cet objet.

Espaces de noms d’objets de noyau