CppGuide社区 CppGuide社区
首页
  • 最新谷歌C++风格指南(含C++17/20)
  • C++17详解
  • C++20完全指南
  • C++23快速入门
  • C++语言面试问题集锦
  • 🔥C/C++后端开发常见面试题解析 (opens new window)
  • 网络编程面试题 (opens new window)
  • 网络编程面试题 答案详解 (opens new window)
  • 聊聊WebServer作面试项目那些事儿 (opens new window)
  • 字节跳动面试官现身说 (opens new window)
  • 技术简历指南 (opens new window)
  • 🔥交易系统开发岗位求职与面试指南 (opens new window)
  • 第1章 高频C++11重难点知识解析
  • 第2章 Linux GDB高级调试指南
  • 第3章 C++多线程编程从入门到进阶
  • 第4章 C++网络编程重难点解析
  • 第5章 网络通信故障排查常用命令
  • 第6章 高性能网络通信协议设计精要
  • 第7章 高性能服务结构设计
  • 第8章 Redis网络通信模块源码分析
  • 第9章 后端服务重要模块设计探索
  • 🚀 全部章节.pdf 下载 (opens new window)
  • 源码分析系列

    • leveldb源码分析
    • libevent源码分析
    • Memcached源码分析
    • TeamTalk源码分析
    • 优质源码分享 (opens new window)
    • 🔥远程控制软件gh0st源码分析
  • 从零手写C++项目系列

    • C++游戏编程入门(零基础学C++)
    • 🔥使用C++17从零开发一个调试器 (opens new window)
    • 🔥使用C++20从零构建一个完整的低延迟交易系统 (opens new window)
    • 🔥使用C++从零写一个C语言编译器 (opens new window)
    • 从零用C语言写一个Redis
  • Windows 10系统编程
  • 🔥Windows Native API编程
  • 🔥Windows x64 ShellCode入门教程
  • 🔥Windows Shellcode实战
  • Go语言特性

    • Go开发实用指南
    • Go系统接口编程
    • 高效Go并发编程
    • Go性能调优
    • Go项目架构设计
  • Go项目实战

    • 使用Go从零开发一个数据库
    • 🔥使用Go从零开发一个编译器 (opens new window)
    • 🔥使用Go从零开发一个解释器 (opens new window)
    • 🔥用Go从零写一个编排器(类Kubernetes) (opens new window)
  • Rust编程

    • Rust编程指南
  • 数据库

    • SQL零基础指南
    • MySQL开发与调试指南
  • Linux内核

    • 心中的内核 —— 在阅读内核代码之前先理解内核
    • 🔥Linux 5.x内核开发与调试 完全指南 (opens new window)
    • TCP源码实现超详细注释版.pdf (opens new window)
GitHub (opens new window)
首页
  • 最新谷歌C++风格指南(含C++17/20)
  • C++17详解
  • C++20完全指南
  • C++23快速入门
  • C++语言面试问题集锦
  • 🔥C/C++后端开发常见面试题解析 (opens new window)
  • 网络编程面试题 (opens new window)
  • 网络编程面试题 答案详解 (opens new window)
  • 聊聊WebServer作面试项目那些事儿 (opens new window)
  • 字节跳动面试官现身说 (opens new window)
  • 技术简历指南 (opens new window)
  • 🔥交易系统开发岗位求职与面试指南 (opens new window)
  • 第1章 高频C++11重难点知识解析
  • 第2章 Linux GDB高级调试指南
  • 第3章 C++多线程编程从入门到进阶
  • 第4章 C++网络编程重难点解析
  • 第5章 网络通信故障排查常用命令
  • 第6章 高性能网络通信协议设计精要
  • 第7章 高性能服务结构设计
  • 第8章 Redis网络通信模块源码分析
  • 第9章 后端服务重要模块设计探索
  • 🚀 全部章节.pdf 下载 (opens new window)
  • 源码分析系列

    • leveldb源码分析
    • libevent源码分析
    • Memcached源码分析
    • TeamTalk源码分析
    • 优质源码分享 (opens new window)
    • 🔥远程控制软件gh0st源码分析
  • 从零手写C++项目系列

    • C++游戏编程入门(零基础学C++)
    • 🔥使用C++17从零开发一个调试器 (opens new window)
    • 🔥使用C++20从零构建一个完整的低延迟交易系统 (opens new window)
    • 🔥使用C++从零写一个C语言编译器 (opens new window)
    • 从零用C语言写一个Redis
  • Windows 10系统编程
  • 🔥Windows Native API编程
  • 🔥Windows x64 ShellCode入门教程
  • 🔥Windows Shellcode实战
  • Go语言特性

    • Go开发实用指南
    • Go系统接口编程
    • 高效Go并发编程
    • Go性能调优
    • Go项目架构设计
  • Go项目实战

    • 使用Go从零开发一个数据库
    • 🔥使用Go从零开发一个编译器 (opens new window)
    • 🔥使用Go从零开发一个解释器 (opens new window)
    • 🔥用Go从零写一个编排器(类Kubernetes) (opens new window)
  • Rust编程

    • Rust编程指南
  • 数据库

    • SQL零基础指南
    • MySQL开发与调试指南
  • Linux内核

    • 心中的内核 —— 在阅读内核代码之前先理解内核
    • 🔥Linux 5.x内核开发与调试 完全指南 (opens new window)
    • TCP源码实现超详细注释版.pdf (opens new window)
GitHub (opens new window)
  • Windows Native API编程 专栏说明
    • 1.1 本专栏适合哪些读者
    • 1.2 注意事项
    • 1.3 配套源码
  • 第1章 原生API(Native API)开发入门
  • 第2章 原生API(Native API)基础
  • 第3章 原生应用程序(Native Applications)
  • 第4章:系统信息
  • 第5章:进程
  • 第6章:线程
  • 第7章:对象与句柄
  • 第 8 章:内存(第一部分)
  • 第9章:I/O
  • 第10章:ALPC
  • 第11章 安全性(Security)
  • 第12章 内存(第二部分)
  • 第13章 注册表
目录

Windows Native API编程 专栏说明

# 引言

Windows的底层(low-level)用户模式(user-mode)编程通常涉及使用有文档记录的Windows API(应用程序接口),这些API从子系统动态链接库(DLL)中导出,例如Kernel32.dll、user32.dll、advapi32.dll、kernelbase.dll等。这些API的底层大多隐藏着系统调用(system calls),通过这些系统调用可访问内核(kernel)。在Windows(或其他任何操作系统)中,任何有实际价值的操作都必须与内核交互以完成系统级任务,例如分配内存、创建进程和线程、执行I/O操作等。

原生API(Native API)由几个动态链接库(DLL)实现,用于实现向内核的过渡。其中最重要的是NtDll.dll——一个系统级的用户模式动态链接库(user-mode DLL),承担着这一关键角色。本专栏将围绕该动态链接库的API展开,重点介绍如何通过调用系统调用将处理器切换到内核模式(kernel-mode)以执行所需操作。专栏中还会讨论其他一些API,它们本身虽不属于系统调用,但仍是NtDll的一部分,值得深入了解。这些函数大多以Rtl(运行时库,Runtime Library)为前缀。

举一个简单的例子,有文档记录的Windows API函数CreateFile(由kernel32.dll提供)会调用NtDll.Dll中的NtCreateFile,以请求内核执行相关操作。大多数原生API(Native API)都没有官方文档——这也是本专栏编写的初衷。

另一个用于调用系统调用的动态链接库(DLL)是Win32u.dll,它通过图形设备接口(Graphics Device Interface,GDI)提供用户界面服务和图形功能支持,来自User32.dll和Gdi32.Dll的调用会通过Win32u.dll传递到内核,但本系专栏暂不讨论这些API。

# 1.1 本专栏适合哪些读者

本专栏面向所有希望了解NtDll.dll提供的Windows原生API(Native API)的读者。无论你是出于纯粹的好奇心、逆向工程(reverse engineering)需求,还是希望在应用程序和工具中使用这些API,都能从中获益。

读者应具备扎实的Windows基础知识,例如对进程(processes)、线程(threads)、虚拟内存(virtual memory)和动态链接库(DLLs)有深入理解。同时,建议读者熟悉有文档记录的Windows API。如需获取相关背景知识,可参考相关书籍。本专栏中涉及的各类Windows概念,在深入讲解原生API(Native API)细节之前,仅会进行简要说明。

# 1.2 注意事项

本专栏中的大部分信息源于我自己的研究,部分内容来自开发社区其他研究者的成果。你应将这些信息视为“合理推测”——我在研究和测试过程中可能存在疏漏。即使某部分信息当前是正确的,也未必适用于所有Windows版本。更重要的是,即使现在正确,在未来的Windows版本中也可能失效。

原生API(Native API)未提供官方文档是有原因的——微软不对该API的稳定性做任何保证,这意味着它可能随时发生变化,且用户无权就此提出异议。不过在实际使用中,该API的稳定性较高,因为微软的一些工具(如任务管理器(Task Manager)和Sysinternals工具集)都广泛使用了这些API。

# 1.3 配套源码

链接: https://pan.baidu.com/s/15koc2R6NR2z0DDzxkHbBTg

提取码: n5m5

第1章 原生API(Native API)开发入门

第1章 原生API(Native API)开发入门→

最近更新
01
C++语言面试问题集锦 目录与说明
03-27
02
第四章 Lambda函数
03-27
03
第二章 关键字static及其不同用法
03-27
更多文章>
Copyright © 2024-2026 沪ICP备2023015129号 张小方 版权所有
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式