fbpx
维基百科

Windows系統函式庫

微軟視窗系統支援一種被稱為動態連結庫的共享程式庫。正如這種程式庫檔案的命名,它只需要被載入記憶體一次,即可被多於一個處理程序使用。本條目將會對以下伴隨Windows而安裝到電腦,作為Windows系統的基礎組成部份的動態連結程式庫進行介紹。

內部元件 编辑

這些程式庫檔案通常不會被程式直接使用,不過它們卻是用來實現其他程式庫功能的重要程式庫。

Hal.dll 编辑

Windows系統的硬件抽象層就是由Hal.dll實現[1]。HAL提供很多函式,而這些函式在不同的硬件平台(以下皆指晶片組)皆有不一樣的實現方式。因為Windows提供HAL這一個功能,所以大部份程式可以隨意呼叫這些函式,而不需要顧及程式在何種平台上執行。舉個例子,回應一個中斷要求的方法在一台有或沒有進階可編程中斷控制器(APIC, Advanced Programmable Interrupt Controller)的電腦是可以有很大分別的,但HAL卻提供了便利,使程式不需要顧及這一個分別。

因為HAL是被載入到核心記憶體,並且在核心模式執行,所以HAL裡的函式是無法被應用程式直接呼叫的,並且HAL沒有提供任何使用者模式的API。因此HAL的主要服務對像是Windows核心和核心模式的驅動程式。雖然大部份驅動程式也是存放在獨立的.sys檔案,但有些核心的驅動程式卻是被直接編譯到Hal.dll裡。

一些核心模式的驅動程式為了對I/O埠和裝置的寄存器進行直接的存取,所以需要直接呼叫Hal.dll裡的函式。因為正如上面提到,在不同的平台做一樣的事情是有不同的實行方法,所以使用Hal.dll的函式可以確保一份驅動程式能在不同的平台和架構上被使用。

在Windows x86的安裝媒體上一般存放著不同版本的HAL檔案,在安裝Windows時會根據現時電腦的平台而把恰當的版本安裝進去。判斷的條件一般包括BIOS類型,或是否有多個處理器。

Ntdll.dll 编辑

Ntdll.dll和ntoskrnl.exe裡含有Windows的原生API,通常被一些必須要在Win32子系統以外的環境下執行的應用程式使用,而這些程式也被稱為原生應用程式。大部份API函式的名字通常以Nt開頭,例如NtDisplayString。Ntdll.dll除了被原生應用程式呼叫外,它還會被Kernel32.dll裡大部份API所使用[2][3][4]。很大部份的視窗應用程式也不會直接呼叫Ntdll.dll[5]

原生應用程式使用Ntdll.dll裡的函式,一般需要比Win32子系統啟動成功前更早的執行。例如csrss.exe,Win32子系統的處理程序,因為Win32應用程式必須要在csrss.exe上執行,所以執行它的應用程序,smss.exe(會話管理員)必須要是原生應用程式。 儘管原生應用程序有.exe的副檔名,但它們並無法被使用者直接執行。例子如autochk.exe,一個用來在開機期間執行chkdsk進行磁碟檢查的程式。

因為原生應用程式不能依赖Win32子系统,所以它們的程式入口不是一般Win32應用程式的MainCRTStartup[3],而是NtProcessStartup。原生程式執行完畢後,它們會呼叫NtTerminateProcess並將執行結果返回。

Win32 API 编辑

以下程式庫包含Win32應用程式常用的函式。

Kernel32.dll 编辑

Kernel32.dll提供應用程式一些Win32下的基底API,包括記憶體管理、輸入/輸出操作和同步函式。它們大部份函式皆由原生應用程式實現,例如Ntdll.dll[6]

Gdi32.dll 编辑

Gdi32.dll提供跟圖形裝置界面有關的函式,例如輸出到顯示卡列印機的原生繪圖功能。呼叫這個程式庫裡函式的應用程式通常是為了執行底層的繪圖功能、文字輸出、字型管理或其他相似功能[6][7]

初時GDI只支援16或256色的EGA/VGA顯示卡和單色列印機,不過GDI的功能已經漸漸升。直到現在它更支援TrueType字型、半透明通道和多螢幕支援。

User32.dll 编辑

User32.dll提供創建和管理Windows圖形界面的功能,例如桌面視窗和功能表。裡面的函式可以讓應用程式建立及管理視窗、接收Windows訊息(諸如使用者的輸入或系統的通知)、在視窗中顯示文字,及顯示一個訊息視窗。

這個函式庫裡面大部份函式也需要倚靠Gdi32.dll提供的繪圖功能,來對使用者界面進行渲染。有些程式還會直接使用GDI函式,來對先前由User32.dll所建立的視窗進行底層繪圖。

Comctl32.dll 编辑

comctl32.dll主要提供各種標準視窗界面元件。它提供對話框如開啟檔案、存檔及另存新檔,或視窗元件如按鈕和進度列。它倚靠user32.dll和Gdi32.dll來建立及管理這些界面元素。

參見 编辑

參考 编辑

  1. ^ Blunden, Bill. The Rootkit Arsenal: Escape and Evasion in the Dark Corners of the System. Jones & Bartlett Learning. 2009: 101. ISBN 978-1-59822-061-2. 
  2. ^ Eilam, Eldad. Reversing: Secrets of Reverse Engineering. John Wiley & Sons. 2011: 68–69. ISBN 978-1-118-07976-8. 
  3. ^ 3.0 3.1 . [2011-12-14]. (原始内容存档于2010-09-12). 
  4. ^ Russinovich, Mark A. & Solomon, David A. Windows® Internals. O'Reilly Media. 2009: 136. ISBN 978-0-7356-3796-2. 
  5. ^ Marceau, Carla & Stillerman, Matt. Modular behavior profiles in systems with shared libraries. Neng, Peng et al. (编). Information and communications security: 8th international conference, ICICS 2006 [...] proceedings. Springer. 2006: 371. ISBN 978-3-540-49496-6. 
  6. ^ 6.0 6.1 . [2012-08-23]. (原始内容存档于2016-10-11). 
  7. ^ See also, the documentation for the Wine implementation of gdi32.dll: Wine API: gdi32.dll (页面存档备份,存于互联网档案馆

外部連結 编辑

  • - Tips for using the User API Client Library with Visual Basic
  • - Tips for using the Kernel API Client Library with Visual Basic
  • Unofficial website that documents most of the Native API methods (页面存档备份,存于互联网档案馆
  • Retrieving the kernel32.dll base address (页面存档备份,存于互联网档案馆

windows系統函式庫, 微軟視窗系統支援一種被稱為動態連結庫的共享程式庫, 正如這種程式庫檔案的命名, 它只需要被載入記憶體一次, 即可被多於一個處理程序使用, 本條目將會對以下伴隨windows而安裝到電腦, 作為windows系統的基礎組成部份的動態連結程式庫進行介紹, 目录, 內部元件, ntdll, win32, kernel32, gdi32, user32, comctl32, 參見, 參考, 外部連結內部元件, 编辑這些程式庫檔案通常不會被程式直接使用, 不過它們卻是用來實現其他程式庫功能的重要程. 微軟視窗系統支援一種被稱為動態連結庫的共享程式庫 正如這種程式庫檔案的命名 它只需要被載入記憶體一次 即可被多於一個處理程序使用 本條目將會對以下伴隨Windows而安裝到電腦 作為Windows系統的基礎組成部份的動態連結程式庫進行介紹 目录 1 內部元件 1 1 Hal dll 1 2 Ntdll dll 2 Win32 API 2 1 Kernel32 dll 2 2 Gdi32 dll 2 3 User32 dll 2 4 Comctl32 dll 3 參見 4 參考 5 外部連結內部元件 编辑這些程式庫檔案通常不會被程式直接使用 不過它們卻是用來實現其他程式庫功能的重要程式庫 Hal dll 编辑 Windows系統的硬件抽象層就是由Hal dll實現 1 HAL提供很多函式 而這些函式在不同的硬件平台 以下皆指晶片組 皆有不一樣的實現方式 因為Windows提供HAL這一個功能 所以大部份程式可以隨意呼叫這些函式 而不需要顧及程式在何種平台上執行 舉個例子 回應一個中斷要求的方法在一台有或沒有進階可編程中斷控制器 APIC Advanced Programmable Interrupt Controller 的電腦是可以有很大分別的 但HAL卻提供了便利 使程式不需要顧及這一個分別 因為HAL是被載入到核心記憶體 並且在核心模式執行 所以HAL裡的函式是無法被應用程式直接呼叫的 並且HAL沒有提供任何使用者模式的API 因此HAL的主要服務對像是Windows核心和核心模式的驅動程式 雖然大部份驅動程式也是存放在獨立的 sys檔案 但有些核心的驅動程式卻是被直接編譯到Hal dll裡 一些核心模式的驅動程式為了對I O埠和裝置的寄存器進行直接的存取 所以需要直接呼叫Hal dll裡的函式 因為正如上面提到 在不同的平台做一樣的事情是有不同的實行方法 所以使用Hal dll的函式可以確保一份驅動程式能在不同的平台和架構上被使用 在Windows x86的安裝媒體上一般存放著不同版本的HAL檔案 在安裝Windows時會根據現時電腦的平台而把恰當的版本安裝進去 判斷的條件一般包括BIOS類型 或是否有多個處理器 Ntdll dll 编辑 Ntdll dll和ntoskrnl exe裡含有Windows的原生API 通常被一些必須要在Win32子系統以外的環境下執行的應用程式使用 而這些程式也被稱為原生應用程式 大部份API函式的名字通常以Nt開頭 例如NtDisplayString Ntdll dll除了被原生應用程式呼叫外 它還會被Kernel32 dll裡大部份API所使用 2 3 4 很大部份的視窗應用程式也不會直接呼叫Ntdll dll 5 原生應用程式使用Ntdll dll裡的函式 一般需要比Win32子系統啟動成功前更早的執行 例如csrss exe Win32子系統的處理程序 因為Win32應用程式必須要在csrss exe上執行 所以執行它的應用程序 smss exe 會話管理員 必須要是原生應用程式 儘管原生應用程序有 exe的副檔名 但它們並無法被使用者直接執行 例子如autochk exe 一個用來在開機期間執行chkdsk進行磁碟檢查的程式 因為原生應用程式不能依赖Win32子系统 所以它們的程式入口不是一般Win32應用程式的MainCRTStartup 3 而是NtProcessStartup 原生程式執行完畢後 它們會呼叫NtTerminateProcess並將執行結果返回 Win32 API 编辑以下程式庫包含Win32應用程式常用的函式 Kernel32 dll 编辑 Kernel32 dll提供應用程式一些Win32下的基底API 包括記憶體管理 輸入 輸出操作和同步函式 它們大部份函式皆由原生應用程式實現 例如Ntdll dll 6 Gdi32 dll 编辑 Gdi32 dll提供跟圖形裝置界面有關的函式 例如輸出到顯示卡和列印機的原生繪圖功能 呼叫這個程式庫裡函式的應用程式通常是為了執行底層的繪圖功能 文字輸出 字型管理或其他相似功能 6 7 初時GDI只支援16或256色的EGA VGA顯示卡和單色列印機 不過GDI的功能已經漸漸升 直到現在它更支援TrueType字型 半透明通道和多螢幕支援 User32 dll 编辑 User32 dll提供創建和管理Windows圖形界面的功能 例如桌面 視窗和功能表 裡面的函式可以讓應用程式建立及管理視窗 接收Windows訊息 諸如使用者的輸入或系統的通知 在視窗中顯示文字 及顯示一個訊息視窗 這個函式庫裡面大部份函式也需要倚靠Gdi32 dll提供的繪圖功能 來對使用者界面進行渲染 有些程式還會直接使用GDI函式 來對先前由User32 dll所建立的視窗進行底層繪圖 Comctl32 dll 编辑 comctl32 dll主要提供各種標準視窗界面元件 它提供對話框如開啟檔案 存檔及另存新檔 或視窗元件如按鈕和進度列 它倚靠user32 dll和Gdi32 dll來建立及管理這些界面元素 參見 编辑Windows NT Windows API 動態連結庫參考 编辑 Blunden Bill The Rootkit Arsenal Escape and Evasion in the Dark Corners of the System Jones amp Bartlett Learning 2009 101 ISBN 978 1 59822 061 2 Eilam Eldad Reversing Secrets of Reverse Engineering John Wiley amp Sons 2011 68 69 ISBN 978 1 118 07976 8 3 0 3 1 Inside Native Windows Applications 2011 12 14 原始内容存档于2010 09 12 Russinovich Mark A amp Solomon David A Windows Internals O Reilly Media 2009 136 ISBN 978 0 7356 3796 2 Marceau Carla amp Stillerman Matt Modular behavior profiles in systems with shared libraries Neng Peng et al 编 Information and communications security 8th international conference ICICS 2006 proceedings Springer 2006 371 ISBN 978 3 540 49496 6 6 0 6 1 Visual Studio Developer Center Identifying Functions in DLLs 2012 08 23 原始内容存档于2016 10 11 See also the documentation for the Wine implementation of gdi32 dll Wine API gdi32 dll 页面存档备份 存于互联网档案馆 外部連結 编辑維基教科書中的相關電子教程 Windows Programming GDI and DrawingAPI calls list USER32 DLL Tips for using the User API Client Library with Visual Basic API calls list Kernel32 dll Tips for using the Kernel API Client Library with Visual Basic Native API reference Unofficial website that documents most of the Native API methods 页面存档备份 存于互联网档案馆 Retrieving the kernel32 dll base address 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title Windows系統函式庫 amp oldid 71702977, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。