Objetos kernel

Los identificadores de objeto kernel son específicos del proceso. Es decir, un proceso debe crear el objeto o abrir un objeto existente para obtener un identificador de objeto kernel. El límite por proceso en los identificadores del kernel es 2^24. Sin embargo, los identificadores se almacenan en el grupo paginado, por lo que el número real de identificadores que puede crear se basa en la memoria disponible. El número de identificadores que puede crear en Windows de 32 bits es significativamente inferior a 2^24.

Cualquier proceso puede crear un nuevo identificador para un objeto kernel existente (incluso uno creado por otro proceso), siempre que el proceso conozca el nombre del objeto y tenga acceso de seguridad al objeto. Los identificadores de objeto kernel incluyen derechos de acceso que indican las acciones que se pueden conceder o denegar a un proceso. Una aplicación especifica los derechos de acceso cuando crea un objeto u obtiene un identificador de objeto existente. Cada tipo de objeto kernel admite su propio conjunto de derechos de acceso. Por ejemplo, los identificadores de eventos pueden tener acceso de espera o establecido (o ambos), los identificadores de archivo pueden tener acceso de lectura o escritura (o ambos), etc. Para obtener más información, vea Objetos protegibles.

En la ilustración siguiente, una aplicación crea un objeto de evento. La función CreateEvent crea el objeto de evento y devuelve un identificador de objeto.

application creating an event object

Una vez creado el objeto de evento, la aplicación puede usar el identificador de eventos para establecer o esperar en el evento. El identificador permanece válido hasta que la aplicación cierra el identificador o finaliza.

La mayoría de los objetos kernel admiten varios identificadores en un solo objeto. Por ejemplo, la aplicación de la ilustración anterior podría obtener identificadores de objeto de evento adicionales mediante la función OpenEvent , como se muestra en la ilustración siguiente.

application creating an event object with multiple handles

Este método permite que una aplicación tenga identificadores con distintos derechos de acceso. Por ejemplo, El identificador 1 podría haber establecido y esperar el acceso al evento, y Handle 2 podría tener solo acceso de espera.

Si otro proceso conoce el nombre del evento y tiene acceso de seguridad al objeto, puede crear su propio identificador de objeto de evento mediante OpenEvent. La aplicación de creación también podría duplicar uno de sus identificadores en el mismo proceso o en otro mediante la función DuplicateHandle .

Un objeto permanece en memoria siempre que exista al menos un identificador de objeto. En la ilustración siguiente, las aplicaciones usan la función CloseHandle para cerrar sus identificadores de objeto de evento. Cuando no hay controladores de eventos, el sistema quita el objeto de la memoria, como se muestra en la ilustración siguiente.

application closing event object handles to remove object from memory

El sistema administra objetos de archivo de forma algo diferente de otros objetos kernel. Los objetos de archivo contienen el puntero de archivo: el puntero al siguiente byte que se va a leer o escribir en un archivo. Cada vez que una aplicación crea un nuevo identificador de archivo, el sistema crea un nuevo objeto de archivo. Por lo tanto, más de un objeto de archivo puede hacer referencia a un único archivo en el disco, como se muestra en la ilustración siguiente.

multiple file objects referring to a file on disk

Solo a través de la duplicación o herencia puede más de un identificador de archivo hacer referencia al mismo objeto de archivo, como se muestra en la ilustración siguiente.

two file handles refer to same file object

En la tabla siguiente se enumeran cada uno de los objetos kernel, junto con las funciones de creador y destructor de cada objeto. Las funciones creator crean el objeto y un identificador de objeto o crean un nuevo identificador de objeto existente. Las funciones de destructor cierran el identificador de objeto. Cuando una aplicación cierra el último identificador de un objeto kernel, el sistema quita el objeto de la memoria.

Kernel (objeto) Función Creator Función Destroyer
Access token CreateRestrictedToken, DuplicateToken, DuplicateTokenEx, OpenProcessToken, OpenThreadToken CloseHandle
Notificación de cambio FindFirstChangeNotification FindCloseChangeNotification
Dispositivo de comunicaciones CreateFile CloseHandle
Entrada de consola CreateFile, con CONIN$ CloseHandle
Búfer de pantalla de la consola CreateFile, con CONOUT$ CloseHandle
Escritorio GetThreadDesktop Las aplicaciones no pueden eliminar este objeto.
Evento CreateEvent, CreateEventEx, OpenEvent CloseHandle
Registro de eventos OpenEventLog, RegisterEventSource, OpenBackupEventLog CloseEventLog
Archivo CreateFile CloseHandle, DeleteFile
Asignación de archivos CreateFileMapping, OpenFileMapping CloseHandle
Buscar archivo FindFirstFile FindClose
Montón MontónCrear MontónDestroy
Puerto de finalización de E/S CreateIoCompletionPort CloseHandle
Trabajo CreateJobObject CloseHandle
Mailslot CreateMailslot CloseHandle
Notificación de recursos de memoria CreateMemoryResourceNotification CloseHandle
Módulo LoadLibrary, GetModuleHandle FreeLibrary
Mutex CreateMutex, CreateMutexEx, OpenMutex CloseHandle
Pipe CreateNamedPipe, CreatePipe CloseHandle, DisconnectNamedPipe
Proceso CreateProcess, OpenProcess, GetCurrentProcess CloseHandle, TerminateProcess
Semaphore CreateSemaphore, CreateSemaphoreEx, OpenSemaphore CloseHandle
Toma de corriente socket, accept closesocket
Thread CreateThread, CreateRemoteThread, GetCurrentThread CloseHandle, TerminateThread
Temporizador CreateWaitableTimer, CreateWaitableTimerEx, OpenWaitableTimer CloseHandle
Actualización de recursos BeginUpdateResource EndUpdateResource
Estación de ventana GetProcessWindowStation Las aplicaciones no pueden eliminar este objeto.

 

Espacios de nombres de objeto kernel