API nativa - Native API

A API nativa é uma interface de programação de aplicativo (API) leve usada pelo Windows NT e aplicativos de modo de usuário . Esta API é usada nos primeiros estágios do processo de inicialização do Windows NT , quando outros componentes e APIs ainda não estão disponíveis. Portanto, alguns componentes do Windows, como o Client / Server Runtime Subsystem (CSRSS), são implementados usando a API nativa. A API nativa também é usada por sub-rotinas como aquelas em kernel32.dll que implementam a API do Windows , a API baseada na qual a maioria dos componentes do Windows são criados.

A maioria das chamadas de API nativas são implementadas em ntoskrnl.exe e expostas ao modo de usuário por ntdll.dll . O ponto de entrada de ntdll.dll é LdrInitializeThunk . Chamadas de API nativas são tratadas pelo kernel por meio da Tabela Descritor de Serviço do Sistema (SSDT).

Grupos de funções

A API nativa compreende muitas funções. Eles incluem funções de tempo de execução C que são necessárias para uma execução de tempo de execução C muito básica , como strlen (), sprintf (), memcpy () e floor (). Outros procedimentos comuns como malloc (), printf (), scanf () estão faltando (o primeiro porque não especifica um heap para alocar memória e o segundo e terceiro porque usam o console, acessado somente via KERNEL32.DLL). A grande maioria das outras rotinas de API nativas, por convenção, tem um prefixo de 2 ou 3 letras, que é:

  • Nt ou Zw são chamadas de sistema declaradas em ntdll.dll e ntoskrnl.exe. Quando chamados de ntdll.dll no modo de usuário, esses grupos são quase exatamente os mesmos; eles entram no modo kernel e chamam a função equivalente em ntoskrnl.exe por meio do SSDT . Ao chamar as funções diretamente em ntoskrnl.exe (possível apenas no modo kernel), as variantes Zw garantem o modo kernel, enquanto as variantes Nt não. O prefixo Zw não significa nada.
  • Rtl é o segundo maior grupo de chamadas ntdll. Eles compreendem a Biblioteca C Run-Time (estendida), que inclui muitas funções de utilitário que podem ser usadas por aplicativos nativos, mas não envolvem diretamente o suporte do kernel.
  • Csr são funções cliente-servidor usadas para se comunicar com o processo do subsistema Win32, csrss.exe ( csrss significa subsistema de tempo de execução cliente / servidor).
  • Dbg são funções de depuração , como um ponto de interrupção de software .
  • Ki são upcalls do modo kernel para eventos como despacho APC .
  • Ldr são funções de carregador para manipulação de arquivos PE e início de novos processos.
  • Nls para Suporte ao Idioma Nacional (semelhante às páginas de código).
  • Pfx para manipulação de prefixo.
  • Tp para manuseio de threadpool.

user32.dll e gdi32.dll incluem várias outras chamadas que interceptam no modo kernel. Eles não faziam parte do design original do Windows NT, como pode ser visto no Windows NT 3.5 . No entanto, devido a problemas de desempenho do hardware daquela época, foi decidido mover o subsistema gráfico para o modo kernel. Assim, as chamadas do sistema no intervalo de 0x1000-0x1FFF são atendidas por win32k.sys (em vez de ntoskrnl.exe como feito para 0-0x0FFF) e são declaradas em user32.dll e gdi32.dll. Estas funções têm o NTUSER e NtGdi prefixo (por exemplo NtUserLockWorkStation e NtGdiEnableEudc ).

Usos

Os usos das funções da API nativa incluem, mas não se limitam a:

  • Habilitando e desabilitando privilégios (RtlAdjustPrivilege)
  • Criação de thread remoto em processos que estão sendo executados em sessões diferentes (RtlCreateUserThread)
  • Executando aplicativo nativo (RtlCreateUserProcess)
  • Executando desligamento forçado (NtShutdownSystem)

Veja também

Referências

links externos