2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩45頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、請(qǐng)點(diǎn)擊以下鏈接下載WinHEC的演講材料Download WinHEC presentations here:http://channel9.msdn.com/Events/WinHEC/2015,通過 Windows 驅(qū)動(dòng)程序框架編寫驅(qū)動(dòng)程序,Tony Lin軟件工程師,通過 Windows 驅(qū)動(dòng)程序框架,可輕松編寫高質(zhì)量的驅(qū)動(dòng)程序。,議程,使用 WDF 的優(yōu)點(diǎn)WDF 核心技術(shù)概念I(lǐng)O 處理硬件交互即插即用和電源交互

2、WDF 開源,什么是 WDF,為什么使用它?,,WDF 究竟是什么?,使編寫驅(qū)動(dòng)程序變得輕松的庫和工具概括了底層操作系統(tǒng)內(nèi)部的復(fù)雜情況實(shí)現(xiàn)了代碼少于 20 行的驅(qū)動(dòng)程序?qū)τ诓煌O(shè)備類是可擴(kuò)展的在不同的設(shè)備類上保持一致如 GPIO、UART、I2C、NFC、傳感器驅(qū)動(dòng)程序輕松的驅(qū)動(dòng)程序調(diào)試內(nèi)置框架活動(dòng)日志記錄驅(qū)動(dòng)程序分析專用工具,支持用戶模式和內(nèi)核模式,內(nèi)核模式驅(qū)動(dòng)程序框架 (KMDF)跨大多數(shù)設(shè)備類的 1000 個(gè)

3、驅(qū)動(dòng)程序用戶模式驅(qū)動(dòng)程序框架 (UMDF)原始 UMDF v1 基于 C++ COMUMDF v2 與內(nèi)核模式使用的驅(qū)動(dòng)程序模型和語法相同支持 USB 外設(shè)、傳感器、NFC、智能卡、HID(包括觸控)… 崩潰的驅(qū)動(dòng)程序僅影響托管進(jìn)程,而不影響整個(gè)系統(tǒng)重啟策略可以恢復(fù)已崩潰的 UMDF 驅(qū)動(dòng)程序,WDF 可在整個(gè)通用平臺(tái)上使用,在整套 Windows 設(shè)備上都受支持,,,,,,,WDF 核心概念,,驅(qū)動(dòng)程序工作流,驅(qū)動(dòng)程序初始

4、化,硬件準(zhǔn)備,I/O 請(qǐng)求處理,硬件交互,,驅(qū)動(dòng)程序清理,設(shè)備可操作,即插即用/電源交互,,,,驅(qū)動(dòng)程序工作流,驅(qū)動(dòng)程序初始化,硬件準(zhǔn)備,I/O 請(qǐng)求處理,硬件交互,,驅(qū)動(dòng)程序清理,設(shè)備可操作,即插即用/電源交互,,,,框架中的一切都由對(duì)象表示(驅(qū)動(dòng)程序、設(shè)備、隊(duì)列等)對(duì)象具有方法、事件和屬性對(duì)象通過 WdfDeviceGetDriver 等方法中的句柄訪問,在對(duì)象上運(yùn)行的 WDF 函數(shù)可以從中注冊(cè)回調(diào)可通過 get/set 方

5、法訪問的單個(gè)值,對(duì)象是 WDF 的基礎(chǔ),自動(dòng)對(duì)象生命期管理,,WDF 管理對(duì)象的分配和釋放維持父/子層次結(jié)構(gòu)如,當(dāng)客戶端完成 WDF 請(qǐng)求時(shí),它會(huì)自動(dòng)刪除,在需要靈活性的情況下:驅(qū)動(dòng)程序可以選擇自行管理對(duì)象生命期,WdfRequestCompleteWithInformation( Request, STATUS_INVALID_DEVICE_REQUEST, (ULONG_PTR) 0 );,驅(qū)動(dòng)程序(WDFDRIV

6、ER),設(shè)備(WDFDEVICE),設(shè)備(WDFDEVICE),隊(duì)列(WDFQUEUE),隊(duì)列(WDFQUEUE),…,…,對(duì)象上下文,每個(gè) WDF 對(duì)象都有一個(gè)上下文空間,上下文是一個(gè)由框架分配和銷毀的任意大小的結(jié)構(gòu)由驅(qū)動(dòng)程序用來存儲(chǔ)特定于對(duì)象的數(shù)據(jù)例如,具有多個(gè)設(shè)備對(duì)象的驅(qū)動(dòng)程序可使用上下文數(shù)據(jù)進(jìn)行區(qū)分,驅(qū)動(dòng)程序工作流,驅(qū)動(dòng)程序初始化,硬件準(zhǔn)備,I/O 請(qǐng)求處理,硬件交互,,驅(qū)動(dòng)程序清理,設(shè)備可操作,即插即用/電源交

7、互,,,,硬件準(zhǔn)備事件,獲取硬件資源、進(jìn)行一些靜態(tài)配置(PrepareHardware),實(shí)現(xiàn)中斷(InterruptEnable),…,進(jìn)入通電狀態(tài)(D0Entry),,,準(zhǔn)備硬件,NTSTATUS OnPrepareHardware( WDFDEVICE Device, WDFCMRESLIST ResourcesRaw, WDFCMRESLIST ResourcesTranslat

8、ed ) { int ResourceCount = WdfCmResourceListGetCount( ResourcesTranslated ); for (i=0; i Type) { case CmResourceTypePort: […] case CmResourceTypeMemory: […] case CmReso

9、urceTypeInterrupt: […] default: break; } } return STATUS_SUCCESS;},獲取硬件資源、進(jìn)行一些靜態(tài)配置(PrepareHardware),實(shí)現(xiàn)中斷(InterruptEnable),…,進(jìn)入通電狀態(tài)(D0Entry),,,,,設(shè)備通電,NTSTATUSOnD0Entry( IN WDFDEVICE

10、 Device, IN WDF_POWER_DEVICE_STATE RecentPowerState ){ PADXL345AccDevice pAccDevice = nullptr pAccDevice = GetContext(Device); WdfWaitLockAcquire(pAccDevice->m_WaitLock); I2CSens

11、orWriteRegister(pAccDevice->m_I2CIoTarget, MY_REGISTER, MY_VALUE, sizeof(MY_VALUE) ); WdfWaitLockRelease(pAccDevice->m_WaitLock); pAccDevice->m_PoweredOn = true; return STATUS_SUCCESS;},,獲取

12、硬件資源、進(jìn)行一些靜態(tài)配置(PrepareHardware),實(shí)現(xiàn)中斷(InterruptEnable),…,進(jìn)入通電狀態(tài)(D0Entry),,,,實(shí)現(xiàn)中斷,NTSTATUS OnInterruptEnable( IN WDFINTERRUPT Interrupt, IN WDFDEVICE Device){ PDEVICE_EXTENSION devExt; ULONG regUlo

13、ng; PULONG intCsr; devExt = GetDeviceContext(WdfInterruptGetDevice(Interrupt) ); intCsr = &devExt->Regs->Int_Csr regUlong = READ_REGISTER_ULONG( intCsr ); WRITE_REGISTER_ULONG( intCs

14、r, regUlong ); return STATUS_SUCCESS;},,獲取硬件資源、進(jìn)行一些靜態(tài)配置(PrepareHardware),實(shí)現(xiàn)中斷(InterruptEnable),…,進(jìn)入通電狀態(tài)(D0Entry),,,,按需擴(kuò)展,獲取硬件資源、進(jìn)行一些靜態(tài)配置(PrepareHardware),實(shí)現(xiàn)中斷(InterruptEnable),…,進(jìn)入通電狀態(tài)(D0Entry),EvtIoResume

15、EvtDMAEnablerFillEvtDeviceSelfManagedIoInitEvtDeviceDisarmWakeFromSxEventChildListScanForChildrenEvtDeviceRemoveAddedResources…,,,,驅(qū)動(dòng)程序工作流,驅(qū)動(dòng)程序初始化,硬件準(zhǔn)備,I/O 請(qǐng)求處理,硬件交互,,驅(qū)動(dòng)程序清理,設(shè)備可操作,即插即用/電源交互,,,,通過框架進(jìn)行 I/O 傳遞,I/O 調(diào)

16、度程序,隊(duì)列選擇,執(zhí)行級(jí)別和同步范圍,驅(qū)動(dòng)程序的 OnRead,IRP,,電源管理,WDFREQUEST,WDFREQUEST,隊(duì)列選擇,隊(duì)列類型有序:一次傳遞一個(gè)請(qǐng)求并行:請(qǐng)求到達(dá)時(shí)即傳遞給驅(qū)動(dòng)程序手動(dòng):驅(qū)動(dòng)程序按其自身速度從 WDFQUEUE 檢索請(qǐng)求,I/O 調(diào)度程序,并行,有序,手動(dòng),IRP,,,,WDFREQUEST,WDFREQUEST,WDFREQUEST,,讀取,寫入,IOCTL,執(zhí)行級(jí)別和同步范圍,IRQL

17、:中斷請(qǐng)求級(jí)別 (PASSIVE_LEVEL、DISPATCH_LEVEL)執(zhí)行級(jí)別:事件回調(diào)在調(diào)用時(shí)所在的 IRQL同步范圍:通過管理鎖強(qiáng)制使回調(diào)執(zhí)行序列化的機(jī)制,設(shè)備范圍:同步設(shè)備隊(duì)列和文件對(duì)象的回調(diào) 隊(duì)列范圍:同步隊(duì)列的回調(diào)無:無同步,電源管理,電源管理的隊(duì)列WDF 隊(duì)列可由“電源管理”僅當(dāng)給設(shè)備供電時(shí)才傳遞請(qǐng)求幫助驅(qū)動(dòng)程序避免在設(shè)備斷電時(shí)接觸硬件隊(duì)列事件EvtIoStop:在電源中斷時(shí)調(diào)用了已傳遞給驅(qū)動(dòng)程

18、序的所有請(qǐng)求EvtIoResume:在通電時(shí)調(diào)用了所有發(fā)送中的請(qǐng)求,請(qǐng)求取消,可以取消已排隊(duì)的請(qǐng)求必須將“發(fā)送中”的請(qǐng)求創(chuàng)建為可取消的請(qǐng)求 在以下情況下,應(yīng)將請(qǐng)求創(chuàng)建為可取消的請(qǐng)求:I/O 將花費(fèi)大量時(shí)間完成對(duì)硬件的 I/O 操作是可中止的,,WdfRequestMarkCancelable ( Request, OnRequestCancel );,驅(qū)動(dòng)程序工作流,驅(qū)動(dòng)程序初始化,硬件準(zhǔn)備,I/O 請(qǐng)求處理,硬件交互,,驅(qū)

19、動(dòng)程序清理,設(shè)備可操作,即插即用/電源交互,,,,使用 I/O 目標(biāo)與硬件交互,驅(qū)動(dòng)程序無法總是能夠完成請(qǐng)求需要堆棧中其他驅(qū)動(dòng)程序的協(xié)助驅(qū)動(dòng)程序到驅(qū)動(dòng)程序I/O 目標(biāo)可以是堆棧中的下一個(gè)驅(qū)動(dòng)程序可以是堆棧之外的外部驅(qū)動(dòng)程序I/O 目標(biāo)作為轉(zhuǎn)換器I/O 目標(biāo)充當(dāng)框架和目標(biāo)設(shè)備對(duì)象之間的轉(zhuǎn)換器,,,默認(rèn) I/O 目標(biāo)和遠(yuǎn)程 I/O 目標(biāo)對(duì)比,默認(rèn) I/O 目標(biāo)驅(qū)動(dòng)程序堆棧中較低的下一個(gè)設(shè)備對(duì)象WDFIOTARGET ioT

20、arget = WdfDeviceGetIoTarget(Device);遠(yuǎn)程 I/O 目標(biāo)遠(yuǎn)程目標(biāo)表示一個(gè)由某個(gè)其他驅(qū)動(dòng)程序創(chuàng)建的設(shè)備對(duì)象WdfIoTargetCreate(Device, WDF_OBJECT_ATTRIBUTES, &IoTarget);,,將請(qǐng)求發(fā)送到 I/O 目標(biāo),以同步方式或以異步方式Sync - WdfIoTargetSendReadSynchronouslyAsync - WdfI

21、oTargetFormatRequestForRead 后跟 WdfRequestSend 超時(shí)驅(qū)動(dòng)程序可以將請(qǐng)求配置為在超時(shí)后取消為了避免驅(qū)動(dòng)程序掛起,建議使用此方法,WdfIoTargetSendIoctlSynchronously( ioTarget, NULL,IOCTL_ACPI_ASYNC_EVAL_METHOD,&inputBufDesc, &outputBufDesc,NULL, NU

22、LL);,驅(qū)動(dòng)程序工作流,驅(qū)動(dòng)程序初始化,硬件準(zhǔn)備,I/O 請(qǐng)求處理,硬件交互,,驅(qū)動(dòng)程序清理,設(shè)備可操作,即插即用/電源交互,,,,即插即用和電源交互,即插即用應(yīng)用場(chǎng)景:設(shè)備電源已拔出。驅(qū)動(dòng)程序已手動(dòng)禁用。電源應(yīng)用場(chǎng)景:系統(tǒng)掛起。設(shè)備長(zhǎng)時(shí)間空閑。用戶按下鼠標(biāo)按鈕來喚醒系統(tǒng)。,選擇加入行為模型,驅(qū)動(dòng)程序僅提供必要的事件回調(diào)硬件狀態(tài)不穩(wěn)定的設(shè)備(電源開/關(guān))D0Entry、D0Exit、…具有喚醒信號(hào)的設(shè)備Arm

23、WakeFrom、DisarmWakeFrom、…合理的默認(rèn)實(shí)現(xiàn)如果事件不含為其注冊(cè)的驅(qū)動(dòng)程序回調(diào),則該事件由 WDF 處理,設(shè)備電源已拔出/禁用,隊(duì)列已自動(dòng)停止WDF 停止電源管理的隊(duì)列和頂層驅(qū)動(dòng)程序最終不會(huì)發(fā)送對(duì)不存在的設(shè)備的請(qǐng)求發(fā)送中的請(qǐng)求已得到通知框架為已傳遞的請(qǐng)求調(diào)用 OnIoStop 回調(diào) 驅(qū)動(dòng)程序可以正常停止 I/O,WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_INIT(&a

24、mp;wakeSettings); WdfDeviceAssignSxWakeSettings( device, &wakeSettings );,系統(tǒng)進(jìn)入睡眠,設(shè)備電源已中斷驅(qū)動(dòng)程序可以要求 WDF 在系統(tǒng)睡眠時(shí)自動(dòng)中斷設(shè)備電源設(shè)備可以喚醒系統(tǒng) 驅(qū)動(dòng)程序可以將其設(shè)備設(shè)置為在輸入時(shí)喚醒系統(tǒng),驅(qū)動(dòng)程序工作流,驅(qū)動(dòng)程序初始化,硬件準(zhǔn)備,I/O 請(qǐng)求處理,硬件交互,,驅(qū)動(dòng)程序清理,設(shè)備可操作,即插即用/電源交互,,,,WD

25、F 開源,,GitHub 上的 WDF!,在 GitHub 提供包括 KMDF 和 UMDF v2在 MIT 許可證下發(fā)布,包含私有符號(hào),通過 Microsoft 的符號(hào)服務(wù)器發(fā)布允許通過框架源代碼進(jìn)行調(diào)試可以在 repo wiki 中找到指令,開源范圍,演示,驅(qū)動(dòng)程序崩潰,使用 WDF 編寫更好的驅(qū)動(dòng)程序,使驅(qū)動(dòng)程序更簡(jiǎn)單的摘要僅實(shí)現(xiàn)其需要自定義的事件回調(diào)的驅(qū)動(dòng)程序提供功能強(qiáng)大的實(shí)用工具對(duì)象,管理對(duì)象生命期

26、功能強(qiáng)大的調(diào)試工具自動(dòng)化框架日志記錄(WPP 記錄器)Windows 調(diào)試器 (WinDbg) 的自定義擴(kuò)展 Windows 性能分析器 (WPA) 的新增加載項(xiàng),延伸閱讀和文檔,WDF 書籍/MSDN 文檔以 Windows 驅(qū)動(dòng)程序?yàn)榛A(chǔ)開發(fā)驅(qū)動(dòng)程序,由 Orwick 和 Smith 編寫 內(nèi)核模式驅(qū)動(dòng)程序框架設(shè)計(jì)指南用戶模式驅(qū)動(dòng)程序框架設(shè)計(jì)指南 選擇驅(qū)動(dòng)程序模型 驅(qū)動(dòng)程序示例一個(gè)基本的“Toaster”示例

27、(UMDF2)回顯驅(qū)動(dòng)程序示例,顯示隊(duì)列和 IOCTL (KMDF)USB FX2 函數(shù)驅(qū)動(dòng)程序 (UMDF2),請(qǐng)對(duì)本會(huì)議進(jìn)行評(píng)價(jià) 您的反饋對(duì)我們至關(guān)重要!,請(qǐng)通過以下鏈接訪問評(píng)價(jià)表:,,(c) 微軟公司。版權(quán)所有。本文件按“現(xiàn)狀”提供。本文件中呈現(xiàn)的信息和視圖(包括URL和其他對(duì)互聯(lián)網(wǎng)網(wǎng)站的引述)可能在未經(jīng)通知的情況下變更。您承擔(dān)對(duì)其進(jìn)行使用的風(fēng)險(xiǎn)。本文件不向您提供對(duì)于任何微軟產(chǎn)品之中的任何知識(shí)產(chǎn)權(quán)的任何法律權(quán)利。您可以復(fù)制并

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論