Natywne API - Native API

Native API jest lekki interfejs programowania aplikacji (API) używany przez Windows NT i trybu użytkownika aplikacji. Ten interfejs API jest używany na wczesnych etapach procesu uruchamiania systemu Windows NT , gdy inne składniki i interfejsy API są nadal niedostępne. Dlatego kilka składników systemu Windows, takich jak podsystem środowiska wykonawczego klienta / serwera (CSRSS), jest implementowanych przy użyciu natywnego interfejsu API. Natywny interfejs API jest również używany przez podprogramy, takie jak te w kernel32.dll, które implementują interfejs API systemu Windows, interfejs API , na podstawie którego tworzona jest większość składników systemu Windows.

Większość wywołań natywnego interfejsu API jest zaimplementowana w ntoskrnl.exe i jest udostępniana w trybie użytkownika przez ntdll.dll . Punkt wejścia ntdll.dll to LdrInitializeThunk . Natywne wywołania API są obsługiwane przez jądro za pośrednictwem tabeli deskryptorów usług systemowych (SSDT).

Grupy funkcyjne

Native API zawiera wiele funkcji. Obejmują one funkcje środowiska uruchomieniowego C, które są potrzebne do bardzo podstawowego wykonywania środowiska C , takie jak strlen (), sprintf (), memcpy () i floor (). Brakuje innych typowych procedur, takich jak malloc (), printf (), scanf () (pierwsza, ponieważ nie określa sterty, z której ma zostać przydzielona pamięć, a druga i trzecia, ponieważ używają konsoli, do której dostęp jest możliwy tylko przez KERNEL32.DLL). Zdecydowana większość innych procedur natywnego interfejsu API ma zgodnie z konwencją dwu- lub trzyliterowy prefiks, którym jest:

  • Nt lub Zw to wywołania systemowe zadeklarowane w plikach ntdll.dll i ntoskrnl.exe. Wywołane z ntdll.dll w trybie użytkownika te grupy są prawie identyczne; przechwytują w tryb jądra i wywołują równoważną funkcję w ntoskrnl.exe za pośrednictwem SSDT . Podczas wywoływania funkcji bezpośrednio w ntoskrnl.exe (możliwe tylko w trybie jądra) warianty Zw zapewniają tryb jądra, podczas gdy warianty Nt nie. Przedrostek Zw nic nie znaczy.
  • Rtl to druga co do wielkości grupa wywołań ntdll. Obejmują one (rozszerzoną) bibliotekę wykonawczą języka C, która zawiera wiele funkcji narzędziowych, które mogą być używane przez aplikacje natywne, ale nie obejmują bezpośrednio obsługi jądra.
  • Csr to funkcje klient-serwer, które służą do komunikacji z procesem podsystemu Win32, csrss.exe ( csrss oznacza podsystem środowiska wykonawczego klient / serwer).
  • Dbg to funkcje debugowania, takie jak programowy punkt przerwania .
  • Ki to wywołania z trybu jądra dla zdarzeń takich jak wysyłanie APC .
  • Ldr to funkcje ładujące do obsługi plików PE i uruchamiania nowych procesów.
  • Nls dla obsługi języków narodowych (podobnie do stron kodowych).
  • Pfx do obsługi prefiksów.
  • Tp dla puli wątków obsługi.

Pliki user32.dll i gdi32.dll zawierają kilka innych wywołań, które przechwytują tryb jądra. Nie były one częścią oryginalnego projektu systemu Windows NT, jak widać w systemie Windows NT 3.5 . Jednak ze względu na problemy z wydajnością sprzętu w tamtym wieku zdecydowano się przenieść podsystem graficzny w tryb jądra. W związku z tym wywołania systemowe w zakresie 0x1000-0x1FFF są obsługiwane przez win32k.sys (zamiast ntoskrnl.exe, jak to zrobiono dla 0-0x0FFF) i są zadeklarowane w user32.dll i gdi32.dll. Funkcje te mają przedrostek NtUser i NtGdi (np. NtUserLockWorkStation i NtGdiEnableEudc ).

Używa

Zastosowania funkcji natywnego interfejsu API obejmują między innymi:

  • Włączanie i wyłączanie uprawnień (RtlAdjustPrivilege)
  • Tworzenie zdalnego wątku w procesach działających w różnych sesjach (RtlCreateUserThread)
  • Uruchomienie aplikacji natywnej (RtlCreateUserProcess)
  • Wykonywanie wymuszonego zamykania (NtShutdownSystem)

Zobacz też

Bibliografia

Linki zewnętrzne