【翻譯】深入解析Windows操作系統(第五版)-第一章

第一章

概念與工具

         在這個章節,我們將介紹有關微軟windows操作系統的概念和詞彙,比如Windows API、進程、線程、虛擬內存、內核模式和用戶模式、對象、句柄、安全以及註冊表,它們將貫穿於整本書。我們同樣將介紹一些能夠幫助我們“遨遊”Windows內核世界的工具,如內核調試器、可靠性與性能監視器以及從Windows Sysinternals(www.microsoft.com/technet/sysinternals)上得到的關鍵工具。另外,我們將告訴你如何使用Windows Driver Kit(WDK)和Windows Software Development Kit(SDK),讓它們成爲幫助我們尋找更多內核信息的資源。

         請保證你能夠明白這一章所講的內容——在寫下這本書剩餘部分的時候我們假定你已經做到了。

Windows操作系統版本

         這本書覆蓋了基於Windows NT內核的最新的兩個Windows操作系統版本:Windows Vista(32位和64位版本)和Windows Server 2008(32位和64位版本)。如果沒有特殊說明,本書所闡述的內容適用於所有Windows版本。作爲一些背景知識,表1-1列出了基於Windows NT內核的操作系統發行版、它們的內部版本號以及實際產品名稱。

基本概念和詞彙

         在這本書中,我們將引用許多對於某些讀者來講不太熟悉的數據結構和概念。在這一節中,我們將闡述一些貫穿全書的詞彙。在閱讀隨後的章節之前你應該熟悉它們。

Windows API

         Windows應用編程接口(API)是Windows操作系統家族的系統編程接口。在介紹64位版本的Windows XP和Windows Server 2003,我們將介紹32位版本的Windows操作系統的編程接口。爲了區別於傳統的16位版本的Windows操作系統的編程接口,它被稱爲Win32 API。在這本書中,Windows API這個詞既包含了32位和64位的Windows Vista和Windows Server 2008操作系統編程接口。

 

注意:Windows API在Windows軟件開發包(SDK)文檔中有詳細的描述。(看本章稍後的“Windows Software Development Kit”一節。)這個文檔可以免費地在www.msdn.microsoft.com 上在線觀看。它也可以通過訂閱MSDN得到。MSDN是微軟面向開發人員的支持平臺,可以從www.msdn.microsoft.com上得到更多的信息。一個非常棒的關於如何利用Windows基本APi編程的書籍是Jeffrey Richter和Christophe Nasarre的《Windows Via C/C++》第五版(微軟出版社,2007)。

 

         Windows API包含了數千個可供調用的函數,它們可以被分爲如下幾類:

    • 基本服務
    • 組件服務
    • 用戶接口服務
    • 圖形和多媒體服務
    • 消息和通信
    • 網絡
    • 站點服務

         這本書將重點介紹關鍵的基本服務,如進程和線程,內存管理,I/O和安全。

關於.NET

   .NET框架包含了一個框架類庫(FCL)和一個通用語言運行時(CLR)。CLR是一個代碼運行環境,具有實時編譯、類型檢查、廢棄空間回收和代碼訪問權限等特性。通過提供這些特性,CLR提供了一個能夠提高編程人員開發效率、減少普遍的編程錯誤的開發環境。可以通過閱讀Jeffrey Richter的《CLR via C#》第二版(微軟出版社,2006)來獲得關於.NET Framework的詳細描述和核心架構。

   CLR的實現如同傳統的COM服務,它的代碼存放在標準的用戶層的DLL(動態鏈接庫)中。實際上,.NET Framework的所有組件都在標準用戶層DLL中實現,在用戶層的Windows API之上。(沒有任何的.NET Framework運行在內核態)。表1-1闡明瞭這些組件之間的關係:

Win32 API的歷史

         有趣的是,Win32 並不是微軟Windows NT最早的編程接口。Windows NT項目是爲了替代OS/2 v2操作系統而開始的,因此主要的編程接口是32位的OS/2表示管理API(Presentation Manager API)。然而,項目進展一年之後,微軟的Windows 3.0衝擊了市場並且大熱,因此微軟改變了方向,將Windows NT作爲Windows家族產品的替代品而不是OS/2的替代品。這是對於Windows API崛起值得紀念的一個關鍵時刻——在這之前,WIndows API只是作爲16位編程接口而存在的。Windows API在之後引入了許多不曾在WIndows 3.1中出現的函數,並且微軟決定使新的函數在名字、語法、使用的數據類型兼容16位的Windows API函數,這樣在任何時候都能夠很輕鬆地將已經存在的16位Windows應用程序移植到Windows NT上。因此,當第一次接觸Windows API的人可能會詫異於爲什麼許多函數的名字和接口不匹配,其中的一個原因就是這種不一致性是爲了保證Windows API與舊的16位Windows API兼容。

服務,函數與例程

         服務這個詞在Windows用戶和編程文檔中有着不同的意義,在不同的上下文中也有着差異。例如,服務這個詞可以指一個在操作系統中可供調用的例程、一個設備驅動或者一個服務進程。接下來的一個列表描述了本書中的一些詞語的含義:

 

  • Windows API函數

  Windows API中被文檔化的、可供調用的子例程,如CreateProcess、CreateFile、GetMessage等。

  • 本地系統服務(或執行體(executive)系統服務)

  可供用戶層調用的,沒有被文檔化的操作系統低層服務。例如,NtCreateProcessEx是CreateProcess函數調用的用來創建一個新進程(如何將WIndowsAPI函數對應於本地函數,請閱讀第三章“操作系統服務分發”一節)的操作系統內部服務。

  •  內核支持函數

  只能夠從內核態被調用的Windows操作系統的子例程(在這一節稍後介紹)。例如,ExAllocatePoolWithTag是可供設備驅動程序調用的從Windows操作系統堆(被稱爲內存池)中分配內存的例程。

  • Windows服務

  Windows服務控制管理器所啓動的進程(雖然註冊表定義了Windows設備驅動程序爲服務,但我們在本書中並不這麼認爲)。例如,任務調用服務運行於用戶層進程,用來支持at命令(類似於UNIX的at或者cron命令)。

  • DLLs(動態鏈接庫)

  一組由可調用的子例程所連接在一起的二進制文件,可被使用這些代碼的應用程序動態加載。例如Msvcrt.dll(C運行時庫)和Kernel32.dll(Windows API子系統庫之一)。Windows用戶態的組件和應用程序大量地使用DLL,並且Windows保證即使一個DLL被多個應用程序所引用,該DLL的代碼在內存中也只有一個副本。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章