Кіріспе
Native API – Windows NT және пайдаланушы режиміндегі қолданбалар қолданатын жеңіл қолданбалық бағдарламалау интерфейсі (API). Бұл API Windows NT жүйесінің басталу процесінің алғашқы кезеңдерінде қолданылады, осы кезде басқа компоненттер мен API-лар әлі қолжетімді болмайды. Сондықтан, Клиент/Сервер орындалу уақыты (CSRSS) кіші жүйесі сияқты Windows компоненттерінің бірнешеуі Native API арқылы іске асырылады. Native API сондай-ақ Windows API-ін іске асыратын, яғни Windows компоненттерінің көп бөлігі негізделген API-ні жүзеге асыратын kernel32.dll сияқты кіші бағдарламалармен де қолданылады. Native API шақыруларының көп бөлігі ntoskrnl.exe-де іске асырылады және ntdll.dll арқылы пайдаланушы режиміне беріледі. ntdll.dll кіру нүктесі – LdrInitializeThunk. Native API шақыруларын ядро System Service Descriptor Table (SSDT) арқылы басқарады.
Функциялық топтар
Туған API көптеген функцияларды қамтиды. Оларға strlen, sprintf, memcpy және floor сияқты C орындалу уақытында қажетті, өте қарапайым C орындалу функциялары кіреді. Malloc, printf, scanf сияқты жиі қолданылатын процедуралар жоқ (біріншісі жадты бөлу үшін үйіндіні көрсетпейді, ал екіншісі мен үшіншісі консольді пайдаланады, ол тек KERNEL32.DLL арқылы қолжетімді). Басқа Native API процедураларының көпшілігі әдетте 2 немесе 3 әріптен тұратын префикстікке ие, яғни: Nt немесе Zw – жүйелік шақырулар, ntdll.dll және ntoskrnl.exe-де жарияланған. ntdll.dll-ден пайдаланушы режимінде шақырғанда, бұл топтар шамамен бірдей болады; олар ядро режиміне үзіліс жасап, ntoskrnl.exe арқылы SSDT-ге эквивалентті функцияны шақырады. Функцияларды тікелей ntoskrnl.exe-де шақырғанда (тек ядро режимінде ғана мүмкін), Zw нұсқалары ядро режимін қамтамасыз етеді, ал Nt нұсқалары – қамтамасыз етпейді. Zw префиксінің ешқандай мағынасы жоқ. Rtl – ntdll шақыруларының екінші ірі тобы. Оларға кеңейтілген C Run Time Library кіреді, онда жергілікті қолданбалар пайдалана алатын көптеген қосымша функциялар бар, бірақ олар тікелей ядро қолдауын қажет етпейді. Csr – Win32 кіші жүйесімен байланысу үшін қолданылатын клиент-сервер функциялары, csrss.exe (csrss – клиент/сервер орындалу уақыты кіші жүйесі). Dbg – бағдарламалық түрдегі бұзу нүктесі сияқты түзету функциялары. Ki – АЖК жіберу сияқты оқиғалар үшін ядро режимінен шақырулар. Ldr – PE файлдарын өңдеу және жаңа процестерді іске қосу үшін жүктеуші функциялар. Nls – Ұлттық тілдерді қолдау (кодтық беттерге ұқсас). Pfx – префикстерді өңдеу үшін. Tp – жинақтық өңдеу үшін. user32.dll және gdi32.dll ядро режиміне үзіліс жасайтын тағы бірнеше шақыруларды қамтиды. Бұл бастапқы Windows NT дизайнының бөлігі емес еді, бұл Windows NT 3.5 нұсқасында көрінеді. Алайда, сол кездегі аппараттық құралдардың өнімділік мәселелеріне байланысты графикалық кіші жүйені ядро режиміне көшіру туралы шешім қабылданды. Осылайша, 0x1000 – 0x1FFF диапазонындағы жүйелік шақырулар win32k.sys арқылы қанағаттандырылады (0 – 0x0FFF үшін ntoskrnl.exe сияқты), және user32.dll және gdi32.dll-де жарияланады. Бұл функциялар NtUser және NtGdi префикстерін иеленеді (мысалы, NtUserLockWorkStation және NtGdiEnableEudc).
Nt or Zw are system calls declared in ntdll. dll and ntoskrnl. exe. When called from ntdll. dll in user mode, these groups are almost exactly the same; they execute an interrupt into kernel mode and call the equivalent function in ntoskrnl. exe via the SSDT. When calling the functions directly in ntoskrnl. exe (only possible in kernel mode), the Zw variants ensure kernel mode, whereas the Nt variants do not. The Zw prefix does not stand for anything. Rtl is the second largest group of ntdll calls. These comprise the (extended) C Run Time Library, which includes many utility functions that can be used by native applications, yet don't directly involve kernel support. Csr are client server functions that are used to communicate with the Win32 subsystem process, csrss. exe (csrss stands for client/server runtime sub system). Dbg are debugging functions such as a software breakpoint. Ki are upcalls from kernel mode for events like APC dispatching. Ldr are loader functions for PE file handling and starting of new processes. Nls for National Language Support (similar to code pages). Pfx for prefix handling. Tp for threadpool handling. user32. dll and gdi32. dll include several other calls that execute an interrupt into kernel mode. These were not part of the original Windows NT design, as can be seen in Windows NT 3.5. However, due to performance issues of hardware of that age, it was decided to move the graphics subsystem into kernel mode. As such, system call in the range of 0x1000 0x1FFF are satisfied by win32k. sys (instead of ntoskrnl. exe as done for 0 0x0FFF), and are declared in user32. dll and gdi32. dll. These functions have the NtUser and NtGdi prefix (e. g. NtUserLockWorkStation and NtGdiEnableEudc).