Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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.
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.
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.
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.
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.
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. |
Tópicos relacionados