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.
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.
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.
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.
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.
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.
Temas relacionados