The Native API is a lightweight
application programming interface
An application programming interface (API) is a connection between computers or between computer programs. It is a type of software Interface (computing), interface, offering a service to other pieces of software. A document or standard that des ...
(API) used by
Windows NT
Windows NT is a Proprietary software, proprietary Graphical user interface, graphical operating system produced by Microsoft as part of its Windows product line, the first version of which, Windows NT 3.1, was released on July 27, 1993. Original ...
's
kernel and
user mode
A modern computer operating system usually uses virtual memory to provide separate address spaces or regions of a single address space, called user space and kernel space. This separation primarily provides memory protection and hardware prote ...
applications. This API is used in the early stages of
Windows NT startup process, when other components and APIs are still unavailable. Therefore, a few Windows components, such as the
Client/Server Runtime Subsystem (CSRSS), are implemented using the Native API. The Native API is also used by
subroutine
In computer programming, a function (also procedure, method, subroutine, routine, or subprogram) is a callable unit of software logic that has a well-defined interface and behavior and can be invoked multiple times.
Callable units provide a ...
s such as those in
kernel32.dll that implement the
Windows API, the API based on which most of the Windows components are created.
Most of the Native API calls are implemented in
ntoskrnl.exe and are exposed to user mode by ntdll.dll. The
entry point
In computer programming, an entry point is the place in a program where the execution of a program begins, and where the program has access to command line arguments.
To start a program's execution, the loader or operating system passes co ...
of ntdll.dll is
LdrInitializeThunk
. Native API calls are handled by the
kernel via the
System Service Descriptor Table (SSDT).
Function groups
The Native API comprises many functions. They include
C runtime functions that are needed for a very basic
C runtime execution, such as strlen(), sprintf(), memcpy() and floor(). Other common procedures like malloc(), printf(), scanf() are missing (the first because it does not specify a
heap to allocate memory from and the second and third because they use the console, accessed only via KERNEL32.DLL). The vast majority of other Native API routines, by convention, have a 2 or 3 letter prefix, which is:
* Nt or Zw are
system call
In computing, a system call (syscall) is the programmatic way in which a computer program requests a service from the operating system on which it is executed. This may include hardware-related services (for example, accessing a hard disk drive ...
s 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
In digital computers, an interrupt (sometimes referred to as a trap) is a request for the processor to ''interrupt'' currently executing code (when permitted), so that the event can be processed in a timely manner. If the request is accepted ...
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
In engineering, debugging is the process of finding the Root cause analysis, root cause, workarounds, and possible fixes for bug (engineering), bugs.
For software, debugging tactics can involve interactive debugging, control flow analysis, Logf ...
functions such as a software
breakpoint
In software development, a breakpoint is an intentional stopping or pausing place in a computer program, program, put in place for debugging purposes. It is also sometimes simply referred to as a pause.
More generally, a breakpoint is a means o ...
.
* 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).
Uses
Uses of Native API functions includes but not limited to:
*Enabling and disabling privileges (RtlAdjustPrivilege)
*Creating remote threads within processes that are running in different session (RtlCreateUserThread)
*Running native applications (RtlCreateUserProcess)
*Performing a forced shutdown (NtShutdownSystem)
*Causing a BSOD in User mode (NtRaiseHardError)
*Displaying a string in Native Mode (NtDisplayString)
See also
*
List of Microsoft Windows components
References
External links
A website that documents most of the Native API functions
Inside Native ApplicationsOpen source native applications development frameworkCompiling Free Pascal programs for the native APIWindows NT Native Tools - A free native applications development utilNative shell - Windows command prompt which can start before Winlogon and Win32 subsystem
{{Microsoft Windows components
Microsoft application programming interfaces
Operating system APIs
Windows NT kernel