Compartir a través de


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 de 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 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 establecido o de espera (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.

aplicación que crea un objeto de evento

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.

aplicación que crea un objeto de evento con varios identificadores

Este método permite que una aplicación tenga identificadores con diferentes derechos de acceso. Por ejemplo, el identificador 1 podría haber establecido y esperar el acceso al evento y el identificador 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 proceso 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 ningún identificador de evento, el sistema quita el objeto de la memoria, como se muestra en la ilustración siguiente.

identificadores de objeto de evento de cierre de aplicación para quitar el objeto de la memoria

El sistema administra objetos de archivo de forma ligeramente diferente de otros objetos de kernel. Los objetos file 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 siguiente ilustración.

varios objetos de archivo que hacen referencia a un archivo en el disco

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.

dos identificadores de archivo hacen referencia al mismo objeto de archivo

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 de creador 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 cambios FindFirstChangeNotification FindCloseChangeNotification
Dispositivo de comunicaciones CreateFile CloseHandle
Entrada de la 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 HeapDestroy
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, aceptar 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