Como Obter Um Descritor

Índice:

Como Obter Um Descritor
Como Obter Um Descritor

Vídeo: Como Obter Um Descritor

Vídeo: Como Obter Um Descritor
Vídeo: COMO SELECIONAR DESCRITORES PARA SUA BUSCA 2024, Maio
Anonim

A interface de programação de aplicativos dos sistemas operacionais Windows é representada por um conjunto de funções. Quando são chamados, vários objetos (arquivos, processos, threads, objetos de sincronização, etc.) podem ser criados. Para fornecer um acesso suficientemente abstrato e unificado a esses objetos, sua identificação é realizada por meio de descritores - valores numéricos "impessoais".

Como obter um descritor
Como obter um descritor

Necessário

  • - um tradutor de uma linguagem de programação que permite o uso da API do Windows;
  • - possivelmente SDK da plataforma Windows.

Instruções

Passo 1

Obtenha puxadores de janela. Há muitas maneiras de fazer isso. O método exato depende do objetivo final.

Use as APIs CreateWindow ou CreateWindowEx para criar uma janela. Eles retornam um identificador em caso de sucesso e NULL em caso de falha.

Procure janelas de nível superior e janelas filho por vários parâmetros usando as funções FindWindow e FindWindowEx, respectivamente. Em uma busca bem-sucedida, o identificador da janela será obtido.

Enumere janelas com funções EnumWindows, EnumChildWindows, EnumThreadWindows. As alças das janelas encontradas serão passadas como parâmetro para a função de retorno de chamada.

Encontre a alça da janela localizada em uma posição específica na tela. Chame uma das funções: WindowFromPoint, ChildWindowFromPoint ou ChildWindowFromPointEx.

Passo 2

Obtenha identificadores de processo. Crie um novo processo chamando as funções de API CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW ou CreateProcessWithLogonW. Todos eles retornam um identificador para o novo processo no campo hProcess da estrutura PROCESS_INFORMATION, o ponteiro para o qual deve ser passado a eles como o último parâmetro.

Encontre o identificador para o processo por seu identificador conhecido. Use a chamada OpenProcess. Os IDs de todos os processos em execução podem ser obtidos, por exemplo, usando as funções CreateToolhelp32Snapshot, Process32First e Process32Next da biblioteca Tool Help.

Recupere o pseudo identificador do processo atual usando a função GetCurrentProcess.

etapa 3

Obtenha descritores de tópicos. As funções CreateThread e CreateRemoteThread criam threads em seu próprio processo e no processo de outra pessoa, respectivamente, retornando seus identificadores. Você pode abrir um thread existente usando seu identificador e obter o identificador correspondente usando a função OpenThread. O pseudo-identificador do fluxo atual é retornado quando GetCurrentThread é chamado.

Passo 4

Descritores para arquivos, diretórios, discos físicos, volumes de disco, consoles, recursos de comunicação (portas de E / S), slots de correio e canais nomeados podem ser obtidos chamando uma única função, CreateFile.

Etapa 5

Os descritores de objeto de mapeamento de arquivo para memória são retornados por chamadas para CreateFileMapping e OpenFileMapping.

Etapa 6

As funções CreateMutex, CreateSemaphore e CreateEvent criam e as funções OpenMutex, OpenSemaphore e OpenEvent abrem objetos de sincronização existentes (mutexes, semáforos e eventos). Todos eles retornam descritores.

Etapa 7

Todos os objetos GDI (como contextos de dispositivo, fontes, pincéis, lápis, bitmaps dependentes e independentes de hardware, seções DIB, etc.) são manipulados por meio de seus descritores. As funções para criar objetos GDI são numerosas e devem ser consultadas na seção MSDN para obter informações sobre elas.

Etapa 8

Um descritor obtido em um processo, via de regra, não pode ser utilizado em outro. No entanto, em alguns casos, é possível obter um descritor duplicado correspondente ao objeto principal. Chame a API DuplicateHandle para duplicar o identificador. Isso pode ser usado, por exemplo, para compartilhar objetos de sincronização sem nome ou canais entre vários processos.

Recomendado: