Native API
Native API (med stor N) er et stort sett udokumentert applikasjonsprogrammeringsgrensesnitt (API) beregnet for intern bruk på Windows NT -familien av operativsystemer utgitt av Microsoft [1] . Den brukes hovedsakelig under systemoppstart når andre Windows-komponenter ikke er tilgjengelige, og av systembibliotekfunksjoner (som kernel32.dll ) som implementerer Windows API -funksjonalitet . Inngangspunktet for programmer som bruker Native API er DriverEntry()-funksjonen, akkurat som Windows- enhetsdrivere . Samtidig, i motsetning til drivere, kjører programmer som bruker Native API inntredje beskyttelsesring , akkurat som vanlige Windows-applikasjoner. De fleste av Native API-kallene er implementert i ntoskrnl.exe og åpnes av ntdll.dll brukermodusprogrammer . Noen Native API-kall implementeres direkte i brukermodus i ntdll.dll.
Mens det meste av Windows NT-operativsystemet bruker det dokumenterte og veldefinerte Windows-APIet , bruker noen komponenter, for eksempel Client/Server Runtime Subsystem (CSRSS), Native API fordi de startes tidlig i Windows NT-oppstartsprosessen . Windows API-funksjonene er ikke tilgjengelige ennå.
Noe skadelig programvare bruker Native API for å skjule sin tilstedeværelse fra antivirusprogramvare [2] .
Funksjonsgrupper
Native API inkluderer et ganske stort antall funksjoner. Den inkluderer C standard bibliotekfunksjoner som strlen(), sprintf() og floor(). Samtidig mangler slike vanlige standard bibliotekanrop som malloc(), printf(), scanf(). De fleste av de andre Native API-funksjonene har et prefiks på to eller tre bokstaver. Spesielt brukes følgende prefikser:
- Nt eller Zw er systemanrop som er deklarert i ntdll.dll og ntoskrnl.exe. Når de kalles fra ntdll.dll i brukermodus, oppfører disse funksjonsgruppene seg omtrent på samme måte: de forårsaker en overgang til kjernemodus, og de kaller den tilsvarende funksjonen fra ntoskrnl.exe ved å bruke grentabellen . Når funksjoner kalles direkte fra ntoskrnl.exe, som kun er mulig i kjernemodus, er varianter som begynner med Zw garantert å kjøre i kjernemodus, mens varianter med prefiks med Nt ikke [3] . Zw-prefikset har ingen dekryptering [4]
- Rtl er den nest største gruppen av ntdll-anrop. Den inkluderer funksjoner som utgjør det utvidede C runtime-biblioteket. Dette er mange verktøyfunksjoner som kan brukes av Native API-applikasjoner som ikke er direkte relatert til tilgang til systemkjernen.
- Csr er klient/server-funksjoner som bruker Win32-delsystemet, csrss.exe (CSRSS står for Runtime Client/Server Subsystem ) for å samhandle med prosessen.
- Dbg - feilsøkingshjelpefunksjoner som programvarebruddpunkt.
- Ki - funksjoner kalt fra kjernemodus, brukes for eksempel til å sende et asynkront prosedyrekall (APC)
- Ldr - Loader-funksjoner for å støtte kjørbare filer i PE -format og starte nye prosesser.
- Nls - for å støtte ulike naturlige språk (ligner kodesider).
- Pfx - for håndtering av prefikser.
- Tp - å jobbe med trådbassenget.
Gdi32.dll inneholder noen flere funksjoner som gjør overgangen til kjernemodus. De var ikke opprinnelig ment av designerne av Windows NT-operativsystemet og finnes ikke i Windows NT 3.5 . Men på grunn av utilstrekkelig maskinvareytelse, da NT 4 ble utgitt, ble det besluttet å flytte grafikkundersystemet til kjernemodus. Som et resultat blir systemanrop i området 0x1000-0x1FFF utført av win32k.sys (i motsetning til anrop i området 0-0x0FFF utført av ntoskrnl.exe) og er deklarert i gdi32.dll. Disse funksjonene er prefikset med Gdi .
Det er noen flere grupper med funksjoner eksportert av ntoskrnl.exe som bare kan brukes i kjernemodus. De kan eller ikke kan betraktes som en del av Native API, avhengig av synspunktet til kilden (siden Native API ikke er fullstendig dokumentert offisielt, er det ikke noe definitivt svar). Disse gruppene inkluderer Cc (cache-kontroller), Ex ( Windows Executive ), FsRtl (runtime calls for filsystemet), Io (I/O manager), Ke (kjernekjernefunksjoner), Ks (kjernetråder), Lpc ( lokale anropsprosedyrer ), Lsa ( lokal sikkerhetsautentiseringsserver ), Mm (minnebehandling), Ob ( objektbehandling ), Ps (prosessbehandling), Se (sikkerhet), Po (strømstyring) og andre [5] [6] [ 7] [8] [9] [4] .
Se også
Lenker
- Uoffisielt nettsted som dokumenterer de fleste av Native API-kallene Arkivert 31. oktober 2012 på Wayback Machine
- Innebygde applikasjoner
- Et åpen kildekode-bibliotek for utvikling av Native API-applikasjoner Arkivert 25. oktober 2012 på Wayback Machine
- Native shell - et kommandoskall som kan kjøres før Winlogon- og Win32-delsystemene Arkivert 5. desember 2012 på Wayback Machine
Merknader
- ↑ Mark Russinovich . Inne i Native API (utilgjengelig lenke) . Sysinternals (1998–2004). Dato for tilgang: 28. februar 2008. Arkivert fra originalen 18. desember 2012.
- ↑ Jason Coombs. Win32 API Obscurity for I/O-blokkering og inntrengingsforebygging (død lenke) . Dr. Dobb's Journal (21. juni 2005). Hentet 4. januar 2007. Arkivert fra originalen 18. desember 2012.
- ↑ The NT Insider, Vol 10, Issue 4, juli-august 2003. Skriv ut en artikkel fra OSR Online (lenke ikke tilgjengelig) . OSR Online (2009). Hentet 13. juni 2009. Arkivert fra originalen 18. desember 2012.
- ↑ 12 Raymond Chen . The Old New Thing: Hva betyr "Zw"-prefikset? (utilgjengelig lenke) . Microsoft Corporation (2009). Hentet 13. juni 2009. Arkivert fra originalen 18. desember 2012.
- ↑ Microsoft Corporation . I/O Manager-rutiner (nedlink) . Microsoft Corporation (2009). Hentet 13. juni 2009. Arkivert fra originalen 18. desember 2012.
- ↑ Microsoft Corporation . Cache Manager-rutiner (utilgjengelig lenke) . Microsoft Corporation (2009). Hentet 13. juni 2009. Arkivert fra originalen 18. desember 2012.
- ↑ Microsoft Corporation . Power Manager-rutiner (utilgjengelig lenke) . Microsoft Corporation (2009). Hentet 13. juni 2009. Arkivert fra originalen 18. desember 2012.
- ↑ Microsoft Corporation . Støtterutiner for kjernebiblioteket (utilgjengelig lenke) . Microsoft Corporation (2009). Hentet 13. juni 2009. Arkivert fra originalen 18. desember 2012.
- ↑ Microsoft Corporation . File System Runtime Library Rutiner (utilgjengelig lenke) . Microsoft Corporation (2009). Hentet 13. juni 2009. Arkivert fra originalen 18. desember 2012.