一丶什麼是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,編寫中斷服務常式來操控硬體抽象層。
現在用於windows平臺的編程工具/語言日新月異,種類繁多,比如使用Dephi、WPF、Qt等,開發效率遠高於使用Win32 API開發,那為什麼還要學習使用Win32 API開發呢?
①理解Windows程式底層運行機制。
②瞭解Windows上各種語言、平臺的實現原理。
③實現其他庫沒有提供的高級功能,比如修改其他進程記憶體等。
三丶學習目錄
暫無,隨文章發佈更新。
四丶其他
筆者學習中,儘量在保持準確性、嚴謹性的同時使用比較自然的語言來寫。
水平有限,不足之處歡迎批評指正。
本文由Celng原創,轉載請標明出處。