偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

淺談 Windows 驅(qū)動(dòng)開發(fā),你會(huì)了嗎?

系統(tǒng) Windows
為什么還要寫?因?yàn)樵趯W(xué)習(xí)的過程中,發(fā)現(xiàn)很多東西還是很相同的,如果你是從事linux 開發(fā),可能會(huì)有些啟發(fā),如果是對windows 驅(qū)動(dòng)開發(fā)有需求,可能提供一些不成熟的建議。

[[432330]]

1. 前言

最近一段時(shí)間一直在研究windows 驅(qū)動(dòng)開發(fā),簡單聊聊。

  • 對比 linux,windows 驅(qū)動(dòng)無論是市面上的書籍,視頻還是社區(qū),博文以及號主,寫的人很少,導(dǎo)致學(xué)習(xí)曲線直線上升。
  • windows 驅(qū)動(dòng) 從業(yè) 人員就更少了。
  • 開發(fā)環(huán)境部署麻煩。
  • 驅(qū)動(dòng)安裝發(fā)布麻煩,需要數(shù)字簽名。如果是發(fā)布到windows update 庫里面,還需要做微標(biāo)認(rèn)證。

為什么還要寫?因?yàn)樵趯W(xué)習(xí)的過程中,發(fā)現(xiàn)很多東西還是很相同的,如果你是從事linux 開發(fā),可能會(huì)有些啟發(fā),如果是對windows 驅(qū)動(dòng)開發(fā)有需求,可能提供一些不成熟的建議。

接下來開始正文,簡單介紹下windows 驅(qū)動(dòng)

2. windows 體系架構(gòu)

2.1 操作系統(tǒng)與應(yīng)用程序

在許多現(xiàn)代操作系統(tǒng)中,應(yīng)用程序和操作系統(tǒng)是相互隔離的。操作系統(tǒng)的核心代碼運(yùn)行在特權(quán)模式下,即內(nèi)核模式。而應(yīng)用程序運(yùn)行在非特權(quán)模式下,即用戶模式。

操作系統(tǒng)和應(yīng)用程序的關(guān)心類似于服務(wù)器和客戶端的關(guān)系,這點(diǎn)在windows 平臺(tái)下顯得更加突出:

幾個(gè)概念:

  • system 進(jìn)程:windows 操作系統(tǒng)本身會(huì)起一個(gè) system 進(jìn)程(加載kernel32.dll),有點(diǎn)類似于 linux 下的 init進(jìn)程,具體細(xì)節(jié)不展開。
  • FDO (Function Driver Object):設(shè)備功能驅(qū)動(dòng)
  • FiDO (Filter Driver Object):過濾驅(qū)動(dòng)
  • PDO (Physical Driver Object):物理設(shè)備驅(qū)動(dòng),真正訪問硬件的地方。
  • IRP (I/O Request Packet),應(yīng)用程序 想要訪問內(nèi)核數(shù)據(jù),必須通過IRP 傳遞。又叫IRP請求,當(dāng)應(yīng)用程序和驅(qū)動(dòng)交互時(shí),發(fā)送一個(gè)IRP 請求,IRP 會(huì)在各層設(shè)備驅(qū)動(dòng)之間來回傳動(dòng)與轉(zhuǎn)發(fā)。

2.2 操作系統(tǒng)分層

windows 的設(shè)計(jì)思想是將內(nèi)核設(shè)計(jì)的盡可能的小,并且采用“客戶端-服務(wù)器”的結(jié)構(gòu)。操作系統(tǒng)各個(gè)組件或者模塊是通過消息進(jìn)行通信的。

  • win32 子系統(tǒng):是最純正的windows 系統(tǒng),其他子系統(tǒng)都是通過win32 子系統(tǒng)的接口來實(shí)現(xiàn)的,一般很少用到。
  • Natvie API :在win32 api 基礎(chǔ)上加上Nt 前綴,基于版本兼容考慮
  • 系統(tǒng)服務(wù):Native API 從用戶模式進(jìn)入內(nèi)核模式,調(diào)用系統(tǒng)服務(wù)。(軟中斷方式實(shí)現(xiàn),陷入內(nèi)核)
  • 執(zhí)行組件:內(nèi)核模式下的一組服務(wù)函數(shù)。
    • 對象管理程序:windows 操作系統(tǒng)提供的服務(wù)幾乎都是以對象的形式存在的,這里的對象類似于面向?qū)ο笳Z言中對象的概論。如驅(qū)動(dòng)對象,設(shè)備對象等管理。
    • 進(jìn)程管理程序:負(fù)責(zé)創(chuàng)建和終止進(jìn)程,線程調(diào)度是由內(nèi)核負(fù)責(zé)的。進(jìn)程管理程序依賴于其他執(zhí)行組件。
    • 虛擬內(nèi)存管理程序:在CPU的內(nèi)存管理單元(MMU)的協(xié)助下,通過某種映射將物理內(nèi)存和虛擬內(nèi)存關(guān)聯(lián)起來。
    • I/O 管理器:負(fù)責(zé)發(fā)起I/O 請求,并管理請求。它由一系列內(nèi)核模式下的例程所組成,這些例程為用戶模式下的進(jìn)程提供了統(tǒng)一接口。I/O 管理器的目標(biāo)是使來自用戶模式的I/O請求獨(dú)立于設(shè)備。
    • 配置管理程序:配置管理程序,記錄所有計(jì)算機(jī)軟,硬件的配置信息。它使用一個(gè)被稱為注冊表的數(shù)據(jù)庫保存這些數(shù)據(jù)。設(shè)備驅(qū)動(dòng)程序根據(jù)注冊表中的信息進(jìn)行加載
  • 驅(qū)動(dòng)程序:I/O 管理器接收應(yīng)用程序后,創(chuàng)建相應(yīng)的 IRP,并傳送至驅(qū)動(dòng)程序進(jìn)行處理:
    • 根據(jù)IRP的請求,直接操作硬件,然后完成此IRP,并返回
    • 根據(jù)IRP的請求,轉(zhuǎn)發(fā)到更底層的驅(qū)動(dòng)中去,并等待底層驅(qū)動(dòng)的返回。
    • 接受到IRP驅(qū)動(dòng)后,不著急于完成。而是分配新的IRP法定其他驅(qū)動(dòng)程序,并等待返回。
  • 內(nèi)核:內(nèi)核被認(rèn)為是 Windows 操作系統(tǒng)的心臟。Windows 的內(nèi)核從執(zhí)行組件分割出來。和執(zhí)行組件相比,內(nèi)核是非常小的:
    • 對內(nèi)核對象的支持。
    • 對線程的調(diào)度
    • 對多處理器同步支持。
    • 中斷處理函數(shù)的支持。
    • 對異常陷阱的支持。
    • 對其他硬件特殊功能的支持。
  • 硬件抽象層:不同的硬件平臺(tái),提供不同的硬件抽象層,并對上層提供統(tǒng)一的操作硬件的接口。

2.3 應(yīng)用程序和驅(qū)動(dòng)

3. windows 驅(qū)動(dòng)框架

3.1 驅(qū)動(dòng)模型:

windows 驅(qū)動(dòng)大致分為這幾類:

  • function driver:設(shè)備功能驅(qū)動(dòng)
  • filter driver:設(shè)備輔助驅(qū)動(dòng)
  • software driver:軟件模塊驅(qū)動(dòng)
  • bus driver:總線設(shè)備驅(qū)動(dòng)

3.2 驅(qū)動(dòng)演變

  • NT 模型 :2000以前,不支持 PNP (即插即用設(shè)備)
  • WDM 模型:NT 基礎(chǔ)上,支持 PNP
  • WDF:WDM的重封裝
    • KMDF:內(nèi)核模式(sys)
    • UMDF:用戶模式(dll)
  • win7 x64 劃時(shí)代操作系統(tǒng),開始數(shù)字簽名了
  • win10 :雙認(rèn)證簽名,也就是說對驅(qū)動(dòng)的安全性要求更高了。

3.3 驅(qū)動(dòng)垂直層次結(jié)構(gòu)

  • 設(shè)備的創(chuàng)建順序,先創(chuàng)建底層PDO,在創(chuàng)建高層的FDO,即從底層設(shè)備到高層設(shè)備。
  • 在PDO 和 FDO之間可能有各種過濾驅(qū)動(dòng)。每層設(shè)備對象由不同的驅(qū)動(dòng)程序創(chuàng)建,或者說每層的設(shè)備對應(yīng)著不同的驅(qū)動(dòng)程序。
  • 底層設(shè)備對象尋找上一層的設(shè)備對象,是依靠底層設(shè)備對象的AttachedDevice 來尋找的。

3.4 驅(qū)動(dòng)水平層次結(jié)構(gòu)

同一驅(qū)動(dòng)程序創(chuàng)建出來的設(shè)備對象的關(guān)系稱之為水平層次關(guān)系。

每一個(gè)設(shè)備通過NextDevice可以尋找水平層次的下一個(gè)設(shè)備對象。

3.5 一個(gè)復(fù)雜的驅(qū)動(dòng)結(jié)構(gòu)

4. windows 開發(fā)環(huán)境搭建

4.1 開發(fā)環(huán)境部署

以 win10 為例,列出需要安裝的東西,詳細(xì)過程限于篇幅以后更新

  • 安裝VS2019
  • 安裝 Windows SDK:VS 2019 順帶安裝
  • 安裝 WDK
  • 安裝 VMware + Win10 虛擬系統(tǒng)

4.2 常用調(diào)試工具

  • windbg:調(diào)試內(nèi)核。WDK 自帶,配合串口或者網(wǎng)絡(luò)調(diào)試windows 內(nèi)核
  • DebugViewer:查看內(nèi)核打印
  • driverMonitor:驅(qū)動(dòng)安裝
  • PCHunter_free:驅(qū)動(dòng)強(qiáng)制卸載,不支持2004版本
  • devicetree:設(shè)備枚舉
  • winobj:查看符號鏈接

5. windows 驅(qū)動(dòng)學(xué)習(xí)建議

有關(guān)Windows 驅(qū)動(dòng)開發(fā)書籍,博文,教程甚少。如果有這方面需求的可以給以下幾個(gè)建議:

  • 環(huán)境搭建:win7 32 + vs2013 即可。不建議 win10 + vs2019,比較新,遇到問題不好解決。其次早期的一些調(diào)試工具,win10 最新版本不一定支持。
  • 繞開數(shù)字簽名:先使用測試模式,安裝驅(qū)動(dòng)。否則光安裝部署就夠折騰的。
  • 入門采用 WDM 驅(qū)動(dòng)模型。市面上將WDM 的書籍和資料相對多些,相對來說,WDF 開發(fā)資料來不少。

 

多看書,windows 驅(qū)動(dòng)不想linux 資料一大把,遇到不懂得,加技術(shù)群,啃書本。

 

責(zé)任編輯:武曉燕 來源: 漫談嵌入式
相關(guān)推薦

2022-04-29 08:55:43

前端開發(fā)規(guī)范

2023-01-10 08:43:15

定義DDD架構(gòu)

2024-02-28 09:07:58

鏈路聚合模式

2023-01-13 16:46:38

CRM系統(tǒng)建設(shè)

2024-05-30 09:43:00

2023-11-30 12:13:29

開發(fā)分離工具

2024-11-28 09:59:35

2023-08-30 07:21:59

2024-01-19 08:25:38

死鎖Java通信

2022-04-01 08:23:17

InputstreString字符串

2024-02-04 00:00:00

Effect數(shù)據(jù)組件

2023-07-26 13:11:21

ChatGPT平臺(tái)工具

2023-08-01 12:51:18

WebGPT機(jī)器學(xué)習(xí)模型

2024-01-02 12:05:26

Java并發(fā)編程

2022-04-12 11:54:19

驅(qū)動(dòng)

2024-01-16 08:22:42

Gradient線性梯度

2022-09-08 11:44:17

EW匯編器連接定位器

2023-10-10 11:04:11

Rust難點(diǎn)內(nèi)存

2024-05-06 00:00:00

InnoDBView隔離

2024-07-31 08:39:45

Git命令暫存區(qū)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號