http://en.wikipedia.org/wiki/Native_API

Windows 的原生 API 函数通常在系统启动时(这里其他 Windows 组件还不可用)、kernel32.dll 中的用以实现系统 API 的例程调用。ntdll.dll 的入口是 LdrInitializeThunk。大部分原生 API 函数通过 ntoskrnl.exe 实现,并通过 ntdll.dll 供用户态使用。有些原生 API 函数直接在用户态实现。

内核通过 SSDT 来处理原生 API 函数的调用请求。

Windows 系统通常使用文档化、定义清晰的 Windows API 实现。但部分组件(如 Client/Server 运行时子系统)通过原生 API 实现,以保证在 Windows NT 启动进程初始化之前运行,因为 Windows API 依赖于 Windows NT 启动进程。

函数簇

原生 API 由很多函数构成,包括基本的 C 运行时函数如 strlen()、sprintf()、floor() 等,但不包括其它一些通用的 C 语言过程,例如 malloc()、printf()、scanf()。绝大部分原生 API 函数名都有 2-3 个字母的前缀:

Nt/Zw:这些函数是 ntdll.dll 和 ntoskrnl.exe 中声名的系统调用函数,通过 ntdll.dll 从用户态调用,这两种前缀的对应函数一般来说功能完全一样,都会进入内核态并通过 SSDT 调用来调用 ntoskrnl.exe 中对应的函数。Zw 前缀本身不具有特殊涵义,不过,当 ntoskrnl.exe 在内核态直接调用相关函数时,执行 Zw 函数簇,Nt 簇的函数不能在内核态使用。

Rtl:Run-Time Library,扩充基本的 C 运行库,包括很多原生程序所需但内核不支持的实用函数。

Csr:Client-Server Runtime,包括用来与 Win32 子系统进程(csrss.exe,client/server runtime sub-system)通信的函数。

Dbg:调试函数。

Ki:从内核态发出的请求,如 APC(Asynchronous Procedure Calls)调度。

Ldr:PE 文件加载、启动新的进程。

Nls:Native 语言支持?

Pfx:前缀处理?

user32.dll 和 gdi32.dll 包括其他一些进入内核态的函数,这些函数并非为初始的 Windows NT 所设计,而是出现在 Windows NT 3.5 中。由于当时的硬件性能问题,图形子系统被移到内核态,因此 0x1000-0x1FFF 范围内的系统调用供 win32k.sys 使用而不是 ntoskrnl.exe(在 0-0x0FFF 中)。这些函数具有 NtUser 和 NtGdi 前缀,如 NtUserLockWorkStation、NtGdiEnableEudc。

微软并没有公开所有原生 API,ntoskrnl.exe 中就有很多只提供给内核态使用的函数,例如 Cc(cache controller)、Ex(Windows Executive)、FsRtl(file system runtime)、Io(I/O manager)、Ke(core kernel routines)、Ks(kernel streaming)、Lpc(local procedure call)、Lsa(local security authority)、Mm(memory management)、Ob(object manager)、Ps(process management)、Se(security)、Po(power management)等等。

Windows Native API的更多相关文章

  1. 掉坑日志:Windows Native API与DPI缩放

    高DPI显示器越来越普及,软件自然也要适应这个变化,最近实习的时候也遇到了一个关于DPI缩放的问题.因为内部框架的一个控件有BUG,会导致内容的显示出问题,后来实在没办法改成了用Windows Nat ...

  2. 用Windows Native API枚举所有句柄及查找文件句柄对应文件名的方法

    枚举所有句柄的方法 由于windows并没有给出枚举所有句柄所用到的API,和进程所拥有的句柄相关的只有GetProcessHandleCount这个函数,然而这个函数只能获取到和进程相关的句柄数,不 ...

  3. node-webkit教程(9)native api 之Tray(托盘)

    node-webkit教程(9)native api 之Tray(托盘) 文/玄魂 目录 node-webkit教程(9)native api 之Tray(托盘) 前言 9.1  Tray简介 9.2 ...

  4. Native Application 开发详解(直接在程序中调用 ntdll.dll 中的 Native API,有内存小、速度快、安全、API丰富等8大优点)

    文章目录:                   1. 引子: 2. Native Application Demo 展示: 3. Native Application 简介: 4. Native Ap ...

  5. 使用Native API 创建进程

    使用 Native API 创建进程 最近几个星期一直在研究这个题目.因为关于方面的资料比较多(可以看下面的参考文章),所以开始时以为很快就结束了.谁知道真正动起手来才发现有很多要考虑的地方,不过还好 ...

  6. Unity在Android和iOS中如何调用Native API

    本文主要是对unity中如何在Android和iOS中调用Native API进行介绍. 首先unity支持在C#中调用C++ dll,这样可以在Android和iOS中提供C++接口在unity中调 ...

  7. mfc 调用Windows的API函数实现同步异步串口通信(源码)

    在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信方便易行,应用广泛. 一般情况下,工控机和各智能仪表通过RS485总线进行通信.RS485的通信方式是半 ...

  8. 不可或缺 Windows Native 系列文章索引

    [源码下载] 不可或缺 Windows Native 系列文章索引 作者:webabcd 1.不可或缺 Windows Native (1) - C 语言: hello c 介绍不可或缺 Window ...

  9. 不可或缺 Windows Native (25) - C++: windows app native, android app native, ios app native

    [源码下载] 不可或缺 Windows Native (25) - C++: windows app native, android app native, ios app native 作者:web ...

随机推荐

  1. 二分查找里的upper bound与lower bound的实现与分析

    1. 问题引入 最近参选了学堂在线的课程数据结构(2015秋).课程由清华大学的邓俊辉老师主讲,在完成课后作业时,遇到了这样一个题目范围查询.在这个题目中,我需要解决这样一个子问题:给定了一组已经排好 ...

  2. nodejs 初学笔记

    首先到nodejs的官网安装nodejs,地址nodejs.org,网站第一页会根据你的电脑系统推荐你适合的版本,下载,不断next,在cmd中输入 node -v 可以看到版本的话,即安装成功. 说 ...

  3. 关于canvas 易忘属性

    globalAlpha=1//表示全局的一个透明度值 默认值是1 globalCompositeOperation // 默认值="source-over"(Default)

  4. HTML cellpadding与cellspacing属性

    单元格(cell) -- 表格的内容 单元格边距(表格填充)(cellpadding) -- 代表单元格外面的一个距离,用于隔开单元格与单元格空间 单元格间距(表格间距)(cellspacing) - ...

  5. 实验一:C语言实现DES加解密算法

    计算程序执行10万次需要的时间: 总共需要175秒 加解密一次的时间小于:0.00175秒 纯计算加解密的时间会更短 去除IO操作后的时间 也就是说加解密一次的时间为0.07毫秒 /*-------- ...

  6. PHP之路——MySql基础操作语句

    1,创建数据库,create datebase 数据库名,在这里kenan建立一个数据库名为myfirstdb create database myfirstdb; 2,查看所有的数据库 show d ...

  7. P1066 2^k进制数

    传送门 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2进 ...

  8. jquery-te 轻量级的编辑器

  9. hdu 5125 magic balls

    题意:求a数组的LIS,但是加了一个条件,为了LIS最大 b[i] a[i]可以交换.最多交换m次: 思路:我们令dp[i][j][l]表示i在最长上升子序列中,已经损失j点能量,第i个人转换了ai和 ...

  10. ISO14443-4块传输协议的实现

    ISO1444-3块传输协议主要用于应用数据的传输,其实现如下: unsigned char Apdu(unsigned char *comm,unsigned short len,unsigned ...