Objets du noyau
Les handles d’objet 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 du noyau est de 2^24. Toutefois, les handles étant stockés dans le pool paginé, le nombre réel de handles que vous pouvez créer est basé sur la mémoire disponible. Le nombre de handles que vous pouvez créer sur Windows 32 bits est considérablement inférieur à 2^24.
Tout processus peut créer un nouveau handle pour 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’objet 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 des 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 d’attente (ou les deux), les handles de fichier 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.
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 de noyau prennent en charge plusieurs handles pour 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.
Cette méthode permet à une application d’avoir des handles avec des droits d’accès différents. Par exemple, Handle 1 peut avoir défini et attendre 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 d’OpenEvent. L’application qui crée 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’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. Lorsqu’il n’existe aucun handle d’événement, le système supprime l’objet de la mémoire, comme illustré dans l’illustration suivante.
Le système gère les objets de fichiers un peu différemment des autres objets du noyau. Les objets 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 nouveau 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.
Ce n’est que par le biais de la duplication ou de l’héritage que plusieurs handles de fichiers peuvent faire référence au même objet de fichier, comme illustré dans l’illustration suivante.
Le tableau suivant répertorie chacun des objets du noyau, ainsi que les fonctions créateur et destructeur de chaque objet. Les fonctions du créateur créent l’objet et un handle d’objet ou créent un handle d’objet existant. Les fonctions de destructeur 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.
Rubriques connexes