《Windows驅動開發技術詳解》之IRP的同步

來源:互聯網
上載者:User

標籤:

  • 應用程式對裝置的同步非同步作業:

大部分IRP都是由應用程式的Win32 API函數發起的。這些Win32 API本身就支援同步和非同步作業。例如,ReadFile、WriteFile和DeviceIoControl等,它們都有非同步和同步兩種操作方式。DeviceIoControl的同步操作:

同步操作時,DeviceIoControl的內部會調用WaitForSingleObject函數去等待一個事件。這個事件直到IRP結束才會觸發。如果通過反組譯碼IoCompleteRequest核心功能,就會發現在IoCompleteRequest內部設定了該事件。DeviceIoControl會暫時進入睡眠狀態,直到IRP結束

而對於非同步作業,其處理過程:

在非同步作業的情況下,當DeviceIoControl被調用時,其內部會產生IRP,並將該IRP傳遞給驅動內部的派遣函數。但此時 DeviceIoControl不會等待該IRP結束,而是直接返回。當IRP經過一段時間被結束時,作業系統會出發一個IRP相關事件。這個事件可以通知應用程式IRP請求被執行完畢

同步操作裝置

CreateFile的函式宣告如下:

1 HANDLE WINAPI CreateFile(2   _In_     LPCTSTR               lpFileName,3   _In_     DWORD                 dwDesiredAccess,4   _In_     DWORD                 dwShareMode,5   _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,6   _In_     DWORD                 dwCreationDisposition,7   _In_     DWORD                 dwFlagsAndAttributes,8   _In_opt_ HANDLE                hTemplateFile9 );

CreateFile中的第六個參數dwFlagsAndAttributes是同步非同步作業的關鍵。如果這個參數中沒有設定FILE_FLAG_OVERLAPPED,則以後對該裝置的操作都是同步操作,否則所有操作為非同步作業

非同步作業裝置方式一

先來看一下OVERLAPPED的結構:

其中最後一個參數hEvent,這個事件用於該操作完成之後通知應用程式。

 

《Windows驅動開發技術詳解》之IRP的同步

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.