• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            小默

            Windows內核學習筆記(六)-- [總結]創建IRP的四種不同方式zz

            在驅動程序中,經常會調用其他的驅動程序;其中,手動構造 IRP ,然后將 IRP 傳遞到相應驅動程序的派遣函數中是一種比較簡單的方法,下面就來介紹下手動創建 IRP 的幾種不同的方法及其特點。

                     創建 IRP 總共有 4 種方法。分別通過調用: IoBuildSynchronousFsdRequest 、 IoBuildAsynchronousFsdRequest 、 IoBuildDeviceIoControl 和 IoAllocateIrp 這 4 個內核函數來完成。這其中, IoAllocateIrp 是比較底層的內核函數,其余的三個內核函數是屬于靠近上層的內核函數,而且這三個函數都是通過調用 IoAllocateIrp 實現的。

                     這幾個函數都是文檔化的函數,原型都可以在 DDK Documentation 中查到,這里就不多說了,下面主要來說說它們的不同點:

            1.       可創建的 IRP 類型

            這四個函數可以創建的 IRP 的類型是不同的。 IoBuildSynchronousFsdRequest 用于創建同步的 IRP 請求,但是只可以創建以下類型的 IRP : IRP_MJ_PNP ,IRP_MJ_READ,IRP_MJ_WRITE,IRP_MJ_FLUSH_BUFFERS 和IRP_MJ_SHUTDOWN ; IoBuildAsynchronousFsdRequest 可創建的 IRP 類型和 IoBuildSynchronousFsdRequest 一樣(從名字就可以看出來),只是它是用來創建異步的 IRP 請求。 IoBuildDeviceIoControl 可以創建的 IRP 類型為:IRP_MJ_DEVICE_CONTROL 和IRP_MJ_INTERNAL_DEVICE_CONTROL 。而且 IoBuildDeviceIoControl 只能創建同步的 IRP 。在這三個函數中,都有一個 ULONG 的輸入參數指定創建的 IRP 類型。 IoAllocateIrp 函數的使用比較靈活,他可以創建任意類型的 IRP ,但不是由參數指定,而是創建后自行填寫,要求用戶對 IRP 的結構有比較熟悉的理解。

            2.       創建后 IRP 對象的刪除

            IoBuildSynchronousFsdRequest 、 IoBuildAsynchronousFsdRequest 和 IoBuildDeviceIoControl 內核函數在創建完 IRP 后,不需要程序員負責刪除 IRP ,操作系統會自動刪除。而用 IoAllocateIrp 內核函數創建 IRP 時,需要程序員自己調用 IoFreeIrp 內核函數刪除 IRP 對象。

            3.       關聯的事件

            IoBuildSynchronousFsdRequest 和 IoBuildDeviceIoControl 在創建 IRP 時,需要為它們準備好一個事件,這個事件會和 IRP 請求相關聯,當 IRP 請求被結束時該事件觸發。程序中要用 KeWaitForSingleObject 函數等待。 IoBuildAsynchronousFsdRequest 函數創建 IRP 時則不需要準備事件,不過可以通過 IRP 的 UserEvent 子域來通知 IRP 請求的結束。

            當執行 IoCompleteRequest 內核函數時,操作系統會檢查 IRP 的 UserEvent 子域是否為空。如果該子域為空,則它代表一個事件指針,這時 IoCompleteRequest 會設置這個事件。

             

            本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/vangoals/archive/2009/07/26/4381567.aspx

            posted on 2010-02-06 00:13 小默 閱讀(1594) 評論(0)  編輯 收藏 引用 所屬分類: Windows

            導航

            統計

            留言簿(13)

            隨筆分類(287)

            隨筆檔案(289)

            漏洞

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            日本精品久久久久中文字幕| 久久久免费观成人影院| 久久天天躁狠狠躁夜夜躁2014| 久久久久国产精品三级网| 久久免费香蕉视频| 亚洲欧美国产日韩综合久久| 久久婷婷五月综合97色直播| 日批日出水久久亚洲精品tv| 亚洲国产成人精品久久久国产成人一区二区三区综 | 日韩久久久久中文字幕人妻| 午夜精品久久久久久久无码| 久久久久免费精品国产| 亚洲AV日韩精品久久久久| 亚洲第一极品精品无码久久| 国产精品久久久久久| 国产伊人久久| 亚洲愉拍99热成人精品热久久| 久久九九精品99国产精品| 久久国产精品国语对白| 久久成人国产精品免费软件| 亚洲国产天堂久久综合网站| 久久久精品国产| 久久精品国产精品青草app| 亚洲国产成人久久综合野外| 久久综合久久自在自线精品自| 亚洲午夜久久久精品影院| 久久人妻AV中文字幕| 国产亚洲美女精品久久久| 久久久精品人妻一区二区三区蜜桃 | 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲 | 久久亚洲AV成人无码国产| 久久人人爽人人爽AV片| 国产精品一区二区久久不卡| 亚洲中文字幕伊人久久无码| 青青青伊人色综合久久| 久久精品中文騷妇女内射| 久久天天躁夜夜躁狠狠躁2022| 国产视频久久| 精品视频久久久久| 999久久久国产精品| 91久久精品国产91性色也|