OBJETOS E MANIPULADORES II
Silício ReversooicìliS ©
Assembly Avançado
TEXTOS ACESSÓRIOS
Notice: Undefined variable: subtitulo in /home/numaboa.com.br/public_html/informatica/oiciliS/assembler/head.php on line 10

(ver 1.2 de 02.08.03)

Os objetos Kernel são específicos do processo. Isto significa que um processo precisa criar um objeto kernel ou então abrir um objeto existente para obter seu manipulador. Qualquer processo pode criar um manipulador novo para um objeto kernel existente, mesmo para um objeto kernel criado por outro processo, contanto que o processo tenha o nome do objeto e tenha acesso seguro a ele.

Manipuladores de objetos kernel incluem direitos de acesso que indicam as ações permitidas ou proibidas a um processo. Um aplicativo especifica os direitos de acesso quando cria um objeto ou obtém um manipulador existente. Cada tipo de objeto kernel dá suporte seu próprio conjunto de direitos de acesso. Por exemplo, manipuladores de evento podem possuir acessos "atribuir" (set), "esperar" (wait) ou ambos; manipuladores de arquivos podem ter acessos "leitura", "escrita" ou ambos, e assim por diante.

Processos podem herdar ou duplicar manipuladores para os seguintes tipos de objetos kernel, entre outros:

  • Processos
  • Linhas de processos (threads)
  • Arquivos (inclusive objetos de arquivos mapeados)
  • Eventos
  • Semáforos
  • Mutex
  • Pipes (nominados e anônimos)
  • Mailslots
  • Dispositivos de comunicação

Na ilustração a seguir, um aplicativo cria um objeto evento. A função CreateEvent cria o objeto evento e retorna uma manipulador de objeto:

(1) Um aplicativo executa a função CreateEvent, a qual cria um objeto evento (2) na memória. A função retorna o manipulador deste objeto (3). Após o objeto evento ter sido criado, o aplicativo pode usar o manipulador de evento para atribuir ou esperar pelo evento. O manipulador continua disponível até que o aplicativo o feche ou até que o aplicativo termine.

A maioria dos objetos kernel permitem múltiplos manipuladores atrelados a um único objeto. Por exemplo, o aplicativo da ilustração anterior poderia obter manipuladores de objetos de evento adicionais usando a função OpenEvent, como mostrado a seguir:

(4) O aplicativo executa a função OpenEvent que retorna um (5) novo manipulador de evento. Este método permite que um aplicativo tenha dois manipuladores com direitos de acesso diferentes. Por exemplo, o manipulador (3) pode ter os direitos "atribuir" e "esperar" e o manipulador (5) ter apenas o direito "esperar".

Se outro processo tiver o nome e o acesso seguro ao objeto, ele pode criar seu próprio manipulador de objeto evento usando OpenEvent. O aplicativo que criou o primeiro manipulador também pode duplicar um de seus manipuladores para o mesmo processo ou para um outro processo através da função DuplicateHandle.

Um objeto permanece na memória enquanto pelo um manipulador deste objeto ainda existir. Na ilustração seguinte, os aplicativos usam a função CloseHandle para fechar seus manipuladores do objeto evento. Quando não existirem mais manipuladores de evento, o sistema remove o objeto da memória:

O sistema trata objetos arquivo de uma forma diferenciada. Os objetos arquivo possuem um ponteiro de arquivo - o ponteiro para o próximo byte a ser lido ou escrito no arquivo. Sempre que um aplicativo criar um novo manipulador de arquivo, o sistema cria um novo objeto arquivo. Portanto, mais de um objeto arquivo pode referenciar o mesmo arquivo em disco, como mostra a ilustração abaixo:

Apenas através de duplicação ou herança mais de um manipulador de arquivo pode referenciar o mesmo objeto arquivo, como mostra a ilustração seguinte:

A tabela seguinte mostra cada um dos objetos kernel com suas funções de criação e destruição correspondentes. As funções de criação criam um objeto e seu respectivo manipulador ou criam um novo manipulador para um objeto existente. Quando o aplicativo fecha o último manipulador de um objeto, o sistema remove o objeto da memória.

Funções para objetos Kernel
OBJETO KERNELFunção para criarFunção para destruir
Alteração de notificaçãoFindFirstChangeNotificationFindCloseChangeNotification
ArquivoCreateFileCloseHandle, DeleteFile
Atualizar recursoBeginUpdateResourceEndUpdateResource
Buffer de tela de consoleCreateFile com CONOUT$CloseHandle
DesktopGetThreadDesktopAplicativos não podem eliminar este objeto
Dispositivo de comunicaçãoCreateFileCloseHandle
Entrada de consoleCreateFile com CONIN$CloseHandle
Estação WindowsGetProcessWindowStationAplicativos não podem eliminar este objeto
EventoCreateEvent, OpenEventCloseHandle
HeapHeapCreateHeapDestroy
Log de eventoOpenEventLog, RegisterEventSource, OpenBackupEventLogCloseEventLog
MailslotCreateMailslotCloseHandle
Mapeamento de arquivoCreateFileMapping, OpenFileMappingCloseHandle
MóduloLoadLibrary, GetModuleHandleFreeLibrary
MutexCreateMutex, OpenMutexCloseHandle
Notificação de recurso de memóriaCreateMemoryResourceNotificationCloseHandle
PipeCreateNamedPipe, CreatePipeCloseHandle, DisconnectNamedPipe
ProcessoCreateProcess, OpenProcess, GetCurrentProcessCloseHandle, TerminateProcess
Procurar arquivoFindFirstFileFindClose
SemáforoCreateSemaphore, OpenSemaphoreCloseHandle
Socketsocket, acceptCloseHandle
TarefaCreateJobObjectCloseHandle
ThreadCreateThread, CreateRemoteThread, GetCurrentThreadCloseHandle, TerminateThread
TimerCreateWaitableTimer, OpenWaitableTimerCloseHandle
Token de acessoCreateRestrictedToken, DuplicateToken, DuplicateTokenEx, OpenProcessToken, OpenThreadTokenCloseHandle




Localizador

| AAAA | Página Inicial | Mapa do Site | Novidades | Busca | Indique esta página | Mestre da Teia | Voltar |
| Localizador || @ Info NumaBoa > oicìliS > Assembly > Textos > Objetos e Manipuladores II
Créditos: vovó Vicki

webdesign sobMedida by vickiSoft - /informatica/oiciliS/assembler/textos/handles2.php (17.02.02) versão 1.2 de 02.08.03
Licença Creative Commons 1998-2006 Aldeia NumaBoa
Exceto onde especificamente declarado, todo material deste site é disponibilizado de acordo com a Licença Creative Commons.