欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Win32 API编程——前言

程序员文章站 2022-08-19 23:49:08
一丶什么是Win32 API? 简单来说,就是微软为了保护操作系统的安全性和稳定性,不允许运行在用户层的进程随意操控系统内核,而是必须按照一定方式。我们用户层要与系统内核层交互(比如对内存、进程操作),只能通过调用Windows内核层提供的接口函数,也就是Win32API来操控。这些API以DLL( ......

一丶什么是win32 api?

  简单来说,就是微软为了保护操作系统的安全性和稳定性,不允许运行在用户层的进程随意操控系统内核,而是必须按照一定方式。我们用户层要与系统内核层交互(比如对内存、进程操作),只能通过调用windows内核层提供的接口函数,也就是win32api来操控。这些api以dll(动态链接库)的形式保存(在system32文件夹中,你可以发现许多dll文件),最常用的是kernel32.dll、user32.dll和gdi32.dll

  所有基于nt内核(xp到win10都是基于nt内核开发)的windows api都可以称为win32,即便是64位系统,也用这个名称,因为64位系统是完全兼容32位程序的(32位系统不能完全兼容16位程序),所以你可以看到这些dll名称都有个"32"的后缀。那我们用c/c++写程序,没用到win32,怎么也能够执行分配内存,打开进程等操作呢?实际上在windows系统上的c/c++的运行库内部也是封装了win32api。进一步说,所有运行在windows用户层的程序必须得调用win32api

  windows采用分层结构,大致来说就是(用户层->内核层->硬件抽象层->硬件层),每一层使用下一层提供的接口来与下一层进行交互。我们日常使用的应用程序都是运行在用户层,通过调用内核层提供的接口(win32api)来与内核层交互,然后系统会请求中断(调用nt*.dll函数),调用内核中的中断服务程序,进而对硬件抽象层进行操作,从而实现用户到硬件的交互。当然,也有许多程序是运行在内核层的(比如驱动程序),windows没有公布用于内核层编程的源码,但是提供了wdk(windows driver kit)来给程序员编写驱动程序,驱动程序可通过内核api,编写中断服务例程来操控硬件抽象层。

二丶为什么要学win32 api?  

  现在用于windows平台的编程工具/语言日新月异,种类繁多,比如使用dephi、wpf、qt等,开发效率远高于使用win32 api开发,那为什么还要学习使用win32 api开发呢?

①理解windows程序底层运行机制。

②了解windows上各种语言、平台的实现原理。

③实现其他库没有提供的高级功能,比如修改其他进程内存等。

三丶学习目录

  暂无,随文章发布更新。

 

四丶其他

  笔者学习中,尽量在保持准确性、严谨性的同时使用比较自然的语言来写。

  水平有限,不足之处欢迎批评指正。

  

 

 

  本文由celng原创,转载请标明出处。