Кіріспе

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).