ネイティブAPI(一部の資料ではNT ネイティブ APIとも呼ばれる)は、 Windows NTのカーネルおよびユーザー モードアプリケーションで使用される軽量のアプリケーション プログラミング インターフェイス(API)です。この API は、他のコンポーネントや API がまだ利用できないWindows NT の起動プロセスの初期段階で使用されます 。そのため、クライアント/サーバー ランタイム サブシステム(CSRSS)など、一部の Windows コンポーネントはネイティブ API を使用して実装されています。ネイティブ API は、Windows APIを実装するkernel32.dllなどのサブルーチンでも使用されます。Windows APIは、ほとんどの Windows コンポーネントが作成される基盤となる API です。
ネイティブ API 呼び出しのほとんどはntoskrnl.exeで実装されており、 ntdll.dllによってユーザー モードに公開されています。ntdll.dllのエントリ ポイントは です。ネイティブ API 呼び出しは、システム サービス ディスクリプタ テーブル(SSDT)を介してカーネルLdrInitializeThunkによって処理されます。
ネイティブ API は多くの関数で構成されています。これには、strlen()、sprintf()、memcpy()、floor() など、非常に基本的なCランタイム実行に必要なC ランタイム関数が含まれます。malloc()、printf()、scanf() などの一般的なプロシージャは含まれていません (malloc() はメモリを割り当てるヒープを指定しないため、printf() と scanf() は KERNEL32.DLL を介してのみアクセスできるコンソールを使用するためです)。慣例として、その他のネイティブ API ルーチンの大部分には、次の 2 文字または 3 文字の接頭辞が付いています。
user32.dll と gdi32.dll には、カーネル モードへの割り込みを実行する他のいくつかの呼び出しが含まれています。これらは、Windows NT 3.5で確認できるとおり、元の Windows NT 設計には含まれていませんでした。しかし、当時のハードウェアのパフォーマンスの問題により、グラフィックス サブシステムをカーネル モードに移行することが決定されました。そのため、0x1000~0x1FFF の範囲のシステム コールは、win32k.sysによって処理され(0~0x0FFF の場合のように ntoskrnl.exe ではなく)、user32.dll と gdi32.dll で宣言されています。これらの関数には、NtUserおよびNtGdi というプレフィックスが付いています (例: NtUserLockWorkStationおよびNtGdiEnableEudc )。
ネイティブAPI関数の用途には、以下のようなものが含まれますが、これらに限定されません。