Partilhar via


Objetos do kernel

Os identificadores de objeto do 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 do kernel. O limite por processo nos identificadores do kernel é 2^24. No entanto, as alças são armazenadas 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 do que 2^24.

Qualquer processo pode criar um novo identificador para um objeto do 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 do 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 do kernel suporta seu próprio conjunto de direitos de acesso. Por exemplo, identificadores de evento podem ter acesso definido ou de espera (ou ambos), 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.

aplicativo criando um objeto de evento

Depois que o objeto de evento tiver sido criado, o aplicativo pode 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 do kernel suporta várias alças para um único objeto. Por exemplo, o aplicativo na ilustração anterior pode obter identificadores de objeto de evento adicionais usando a função OpenEvent, conforme mostrado na ilustração a seguir.

aplicativo criando um objeto de evento com vários identificadores

Esse método permite que um aplicativo tenha identificadores com diferentes direitos de acesso. Por exemplo, Handle 1 pode ter definido e aguardar acesso ao evento, e Handle 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çãoDuplicateHandle.

Um objeto permanece na memória enquanto existir 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 eventos, o sistema remove o objeto da memória, conforme mostrado na ilustração a seguir.

objeto de evento de fechamento de aplicativo identifica para remover objeto da memória

O sistema gerencia objetos de arquivo de forma um pouco diferente de outros objetos do kernel. Os objetos de arquivo contêm o ponteiro de 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 no disco, conforme mostrado na ilustração a seguir.

vários objetos de arquivo referentes a um arquivo no disco

Somente por meio de duplicação ou herança é que mais de um identificador de arquivo pode se referir ao mesmo objeto de arquivo, conforme mostrado na ilustração a seguir.

dois identificadores de arquivo referem-se ao mesmo objeto de arquivo

A tabela a seguir lista cada um dos objetos do 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 do contratorpedeiro fecham a alça do objeto. Quando um aplicativo fecha o último identificador para um objeto do kernel, o sistema remove o objeto da memória.

Objeto do kernel Função de criador Função de destruidor
Token de acesso CreateRestrictedToken , DuplicateToken, DuplicateTokenEx, OpenProcessTokenOpenThreadToken CloseHandle
Notificação de alteração FindFirstChangeNotification FindCloseChangeNotification
Dispositivo de comunicação CreateFile CloseHandle
Entrada de console CreateFile, com CONIN$ CloseHandle
Memória intermédia do ecrã da consola CreateFile, com CONOUT$ CloseHandle
Versão desktop GetThreadDesktop Os aplicativos não podem excluir esse objeto.
Evento CreateEvent, CreateEventEx, OpenEvent CloseHandle
Registo de eventos OpenEventLog, RegisterEventSourceOpenBackupEventLog CloseEventLog
Ficheiro CreateFile CloseHandleDeleteFile
Mapeamento de arquivos CreateFileMapping OpenFileMapping CloseHandle
Localizar ficheiro FindFirstFile FindClose
Pilha HeapCreate HeapDestroy
Porta de conclusão de E/S CreateIoCompletionPort CloseHandle
Emprego CreateJobObject CloseHandle
Slot de correio CreateMailslot CloseHandle
Notificação de recurso de memória CreateMemoryResourceNotification CloseHandle
Módulo LoadLibraryGetModuleHandle FreeLibrary
Mutex CreateMutex, CreateMutexExOpenMutex CloseHandle
Tubo CreateNamedPipe CreatePipe CloseHandle, DisconnectNamedPipe
Processo CreateProcess, OpenProcessGetCurrentProcess CloseHandleTerminateProcess
Semáforo CreateSemaphore, CreateSemaphoreEx, OpenSemaphore CloseHandle
Soquete de soquete , aceitar closesocket
Tópico CreateThread CreateRemoteThread GetCurrentThread CloseHandleTerminateThread
Temporizador CreateWaitableTimer CreateWaitableTimerExOpenWaitableTimer CloseHandle
Atualizar recurso BeginUpdateResource EndUpdateResource
Estação de janela GetProcessWindowStation Os aplicativos não podem excluir esse objeto.

 

Namespaces de objeto do kernel