Windows Native API

时间:2021-09-15 01:20:07

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. hdu 4043 2011北京赛区网络赛D 概率+大数 **

    推出公式为:P = A(2n,n)/(2^(2n)*n!) 但是不会大数,学完java再补

  2. AIX修改用户密码登录不成功案例分享

    背景:使用passwd XXXX fcesjaif,修改新密码仍然提示密码不正确.拒绝登录 a. 使用命令lsuser -f XXXX |grep -i successful 查看不成功的次数 chu ...

  3. 从问题看本质:socket到底是什么(问答式)? .

    转自:http://blog.csdn.net/yeyuangen/article/details/6799575 一.问题的引入——socket的引入是为了解决不同计算机间进程间通信的问题 1.so ...

  4. WPF读书笔记 x名称空间详解(第二天)

    每天看一点,每天进步一点. x名称空间映射的是http://schemas.microsoft.com/winfx/2006/xaml,它包含的类均与解析XAML语言关,亦可称为"XAML名 ...

  5. FutureTask 测试用例

    package currentTest.BlockingQueue; import java.util.concurrent.Callable; import java.util.concurrent ...

  6. hdu_5719_Arrange(脑洞题)

    题目连接:hdu_5719_Arrange 题意: 给你1-n这 n个数,设一个排列的第i个数为Ai, Bi为A1到Ai的最小值,Ci为C1到Ci的最大值,问你有多少种排列方式,然后输出取模后的答案 ...

  7. Array方法归类总结

    数组的转换方法 valueOf()方法,数组调用该方法后返回的还是原来的数组. toString()方法,数组调用该方法后会调用每一项的toStirng()方法,之后将每一项拼接成一个以逗号分割的字符 ...

  8. HDU 6191 Query on A Tree(可持久化Trie)

    题意 \(n\) 个点的有根树,根为 \(1\) .每个点有点权,有 \(q\) 个询问,每次询问以 \(u\) 为根的子树的点的点权中异或 \(x\) 所得的最大值是多少. 思路 求出整棵树的 \( ...

  9. 51Nod 1810 连续区间

    https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1810 题目给出一个1~n的排列,问有多少连续区间.连续区间的定义为区间 ...

  10. Analytic Functions in Oracle

    Contents Overview and IntroductionHow Analytic Functions WorkThe SyntaxExamplesCalculate a running T ...