Partager via


Objets noyau

Les handles d’objets 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 noyau. La limite par processus sur les handles de noyau est de 2^24. Toutefois, les handles sont stockés dans le pool paginé. Le nombre réel de handles que vous pouvez créer est donc basé sur la mémoire disponible. Le nombre de handles que vous pouvez créer sur Windows 32 bits est nettement inférieur à 2^24.

Tout processus peut créer un handle vers un objet noyau existant (même un autre processus), à condition que le processus connaisse le nom de l’objet et dispose d’un accès de sécurité à l’objet. Les handles d’objets noyau incluent des droits d’accès qui indiquent les actions qui peuvent être accordées ou refusées à un processus. Une application spécifie les droits d’accès lorsqu’elle crée un objet ou obtient un handle d’objet existant. Chaque type d’objet noyau prend en charge son propre ensemble de droits d’accès. Par exemple, les handles d’événements peuvent avoir un accès défini ou attendre (ou les deux), les handles 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 é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 handle d’événement pour définir ou attendre l’événement. Le handle reste valide jusqu’à ce que l’application ferme le handle ou se termine.

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

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

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

Si un autre processus connaît le nom de l’événement et dispose d’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 handles dans le même processus ou dans un autre processus à l’aide de la fonction DuplicateHandle.

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

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

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

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

Seule la duplication ou l’héritage peut faire référence à plusieurs handles de fichiers au même objet de fichier, comme illustré dans l’illustration suivante.

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

Le tableau suivant répertorie chacun des objets du noyau, ainsi que les fonctions créateur et destructeur de chaque objet. Les fonctions de créateur créent l’objet et un handle d’objet ou créent un handle d’objet existant. Les fonctions de destroyer ferment le handle d’objet. Lorsqu’une application ferme le dernier handle à un objet noyau, le système supprime l’objet de la mémoire.

Objet Kernel Fonction Creator Fonction destroyer
Jeton d’accès CreateRestrictedToken, DuplicateToken, DuplicateTokenEx, OpenProcessToken, OpenThreadToken closeHandle
Notification de modification FindFirstChangeNotification FindCloseChangeNotification
Appareil de communication CreateFile closeHandle
Entrée de 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
Lime CreateFile CloseHandle, DeleteFile
Mappage de fichiers CreateFileMapping OpenFileMapping closeHandle
Rechercher un fichier FindFirstFile FindClose
Tas HeapCreate heapDestroy
Port d’achèvement des E/S CreateIoCompletionPort closeHandle
Travail CreateJobObject closeHandle
Mailslot CreateMailslot closeHandle
Notification de ressource mémoire CreateMemoryResourceNotification closeHandle
Module LoadLibrary, GetModuleHandle FreeLibrary
Mutex CreateMutex, CreateMutexEx, OpenMutex closeHandle
Pipe CreateNamedPipe, CreatePipe CloseHandle, DisconnectNamedPipe
Processus CreateProcess, OpenProcess, GetCurrentProcess CloseHandle, TerminateProcess
Sémaphore CreateSemaphore, CreateSemaphoreEx, OpenSemaphore closeHandle
Prise de socket, accepter closesocket
Fil CreateThread, CreateRemoteThread, GetCurrentThread CloseHandle, TerminateThread
Minuteur CreateWaitableTimer, CreateWaitableTimerEx, OpenWaitableTimer closeHandle
Mettre à jour la ressource BeginUpdateResource EndUpdateResource
Station de fenêtre GetProcessWindowStation Les applications ne peuvent pas supprimer cet objet.

 

espaces de noms d’objets noyau