Objetos Kernel
Identificadores de objeto kernel são específicos do processo. Ou seja, um processo deve criar o objeto ou abrir um objeto existente para obter um identificador de objeto kernel. O limite por processo em identificadores de kernel é 2^24. No entanto, os identificadores são armazenados no pool paginado, portanto, o número real de identificadores que você pode criar é baseado na memória disponível. O número de identificadores que você pode criar no Windows de 32 bits é significativamente menor que 2^24.
Qualquer processo pode criar um novo identificador para um objeto kernel existente (mesmo um criado por outro processo), desde que o processo saiba o nome do objeto e tenha acesso de segurança ao objeto. Os identificadores de objeto kernel incluem direitos de acesso que indicam as ações que podem ser concedidas ou negadas a um processo. Um aplicativo especifica direitos de acesso quando cria um objeto ou obtém um identificador de objeto existente. Cada tipo de objeto kernel dá suporte a seu próprio conjunto de direitos de acesso. Por exemplo, os identificadores de evento podem ter acesso definido ou de espera (ou ambos), os identificadores de arquivo podem ter acesso de leitura ou gravação (ou ambos) e assim por diante. Para obter mais informações, consulte Objetos protegíveis.
Na ilustração a seguir, um aplicativo cria um objeto de evento. A função CreateEvent cria o objeto de evento e retorna um identificador de objeto.
Depois que o objeto de evento tiver sido criado, o aplicativo poderá usar o identificador de evento para definir ou aguardar o evento. O identificador permanece válido até que o aplicativo feche o identificador ou termine.
A maioria dos objetos kernel dá suporte a vários identificadores para um único objeto. Por exemplo, o aplicativo na ilustração anterior poderia obter identificadores de objeto de evento adicionais usando a função OpenEvent , conforme mostrado na ilustração a seguir.
Esse método permite que um aplicativo tenha identificadores com direitos de acesso diferentes. Por exemplo, o Identificador 1 pode ter definido e aguardar o acesso ao evento e o Identificador 2 pode ter apenas acesso de espera.
Se outro processo souber o nome do evento e tiver acesso de segurança ao objeto, ele poderá criar seu próprio identificador de objeto de evento usando OpenEvent. O aplicativo de criação também pode duplicar um de seus identificadores no mesmo processo ou em outro processo usando a função DuplicateHandle .
Um objeto permanece na memória, desde que exista pelo menos um identificador de objeto. Na ilustração a seguir, os aplicativos usam a função CloseHandle para fechar seus identificadores de objeto de evento. Quando não há identificadores de evento, o sistema remove o objeto da memória, conforme mostrado na ilustração a seguir.
O sistema gerencia objetos de arquivo de maneira um pouco diferente de outros objetos kernel. Os objetos file contêm o ponteiro do arquivo – o ponteiro para o próximo byte a ser lido ou gravado em um arquivo. Sempre que um aplicativo cria um novo identificador de arquivo, o sistema cria um novo objeto de arquivo. Portanto, mais de um objeto de arquivo pode se referir a um único arquivo em disco, conforme mostrado na próxima ilustração.
Somente por meio de duplicação ou herança é possível que mais de um identificador de arquivo se refira ao mesmo objeto de arquivo, conforme mostrado na ilustração a seguir.
A tabela a seguir lista cada um dos objetos kernel, juntamente com as funções de criador e destruidor de cada objeto. As funções do criador criam o objeto e um identificador de objeto ou criam um novo identificador de objeto existente. As funções de destruidor fecham o identificador do objeto. Quando um aplicativo fecha o último identificador de um objeto kernel, o sistema remove o objeto da memória.
Tópicos relacionados