• <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>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運轉,開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            File System Filters Driver(一)

            Posted on 2009-10-30 12:14 S.l.e!ep.¢% 閱讀(340) 評論(0)  編輯 收藏 引用 所屬分類: Windows WDM
            [資料] http://www.shnenglu.com/Files/sleepwom/Windows%20File%20Filters%20Driver%20StudyII.rar

            看的資料是狂人的 Windows File Filter Driver II
            1. NTSTATUS
            ??? DriverEntry(
            ??? IN PDRIVER_OBJECT DriverObject,
            ??? IN PUNICODE_STRING RegistryPath
            ??? );? 函數是每個驅動的入口函數

            2. DriverObject?簡稱 DO
            ??? DriverObject 是我們所寫的驅動對應的 DriverObject, 在加載驅動時,由系統分配的一個對象
            ??? DriverObject?有一組函數指針,稱為 dispatch functions, 開發驅動的任務就是撰寫這些 dispatch function

            3. RegistryPath 是專門用于記錄本驅動相關參數的注冊表路徑,也是由系統分配的

            4. 小試牛刀
            #ifdef?__cplusplus

            extern?"C"
            {
            #endif

            #include?
            "ntddk.h"

            #ifdef?__cplusplus
            }
            #endif

            PDEVICE_OBJECT?gSFilterControlDeviceObject;

            VOID?OnUnLoad(IN?PDRIVER_OBJECT?pDriverObject)?
            {
            ????DbgPrint((
            "Enter?DriverUnload\n"));
            ????
            ????IoDeleteDevice(?gSFilterControlDeviceObject?);

            ????DbgPrint((
            "Leave?DriverUnload\n"));
            }

            extern?"C"?NTSTATUS?
            DriverEntry(
            IN?PDRIVER_OBJECT??DriverObject,
            IN?PUNICODE_STRING?RegistryPath)
            {

            ????DbgPrint(
            "Entry?DriverEntry?Function!\n");

            ????DriverObject
            ->DriverUnload?=?OnUnLoad;

            ????
            //?define?a?unicode?string
            ????UNICODE_STRING?nameString;
            ????RtlInitUnicodeString(
            &nameString,?L"\\FileSystem\\MyFilter");
            ????
            ????
            //?create?a?control?driver
            ????NTSTATUS?status;
            ????status?
            =?IoCreateDevice(DriverObject,?
            ????????????????????????????
            0,?//?has?no?device?extension
            ????????????????????????????&nameString,
            ????????????????????????????FILE_DEVICE_DISK_FILE_SYSTEM,
            ????????????????????????????FILE_DEVICE_SECURE_OPEN,
            ????????????????????????????FALSE,
            ????????????????????????????
            &gSFilterControlDeviceObject);

            ????
            if(?!NT_SUCCESS(?status?)?)
            ????{
            ????????DbgPrint((
            "DriverEntry:Error?Creating?Control?Device?Object?%wZ?status?=?%08x?\n"),
            ?????????????????
            &nameString,?status);
            ????????
            return?status;
            ????}

            ????DbgPrint(
            "Leave?DriverEntry!\n");

            ????
            return?STATUS_SUCCESS;
            }?

            保存為 testwdm.cpp

            #
            #?DO?NOT?EDIT?THIS?FILE
            !!!?Edit?.\sources.?If?you?want?to?add?a?new?source
            #?file?to?
            this?component.?This?file?merely?indirects?to?the?real?make?file
            #?that?
            is?shared?by?all?the?driver?components?of?the?Windows?NT?DDK
            #

            !INCLUDE?$(NTMAKEENV)\makefile.def

            保存為 MAKEFILE

            TARGETNAME=testwdm
            TARGETPATH
            =.\sys
            TARGETTYPE
            =DRIVER
            SOURCES
            =testwdm.cpp

            保存為 SOURCE

            三個文件,然后就可以BUILD了
            使用 DriverMonitor 加載驅動后,然后使用 WinObj.exe 查看
            在 \FileSystem 下面就會多一個 MyFilter 的驅動

            使用 DriverMonitor Stop Driver, 并刪除 Driver
            \FileSystem 下面的 'MyFilter' 就會消失

            FastIo:
            FastIo 是獨立于普通的IRP的分發函數之外的另一組接口,但是他們的作用是一樣的, 就是由驅動處理外部給予的請求,
            而且所處理的請求也基本相同

            FastIo例程返回 FALSE 表示不做任何事,這樣這些請求都會通過IRP重新發送到 普通分發函數.

            Q1.? NTSTATUS
            ???? DriverEntry(
            ??? IN PDRIVER_OBJECT DriverObject,
            ??? IN PUNICODE_STRING RegistryPath
            ??? );
            ?? 函數無疑是驅動的入口函數,但操作系統加載驅動 至 system 線程調用 DriverEntry() 函數的過程是如何的?


            Q2.在本例中,IoCreateDevice() 函數創建的設備是什么設備?假如我想過濾某個物理設備的IRP,是不是需要使用
            ????? IoCreateDevice()?函數去創建一個設備,并綁定到物理設備上面?

            Q3: FastIo 接口位于 普通的 Driver分派函數之上?系統會先調用 FastIo 接口再調用 Driver的分派函數?
            最新久久免费视频| 久久精品国产99久久香蕉| 一本色道久久88—综合亚洲精品 | 新狼窝色AV性久久久久久| 亚洲欧美伊人久久综合一区二区 | 青青草原综合久久大伊人导航| 久久久中文字幕日本| 日日噜噜夜夜狠狠久久丁香五月 | 久久精品国产亚洲AV无码偷窥| 狠狠色丁香婷婷综合久久来来去| 一97日本道伊人久久综合影院| 精品久久久久久| 久久亚洲精品无码VA大香大香| 久久精品免费一区二区三区| 久久人人爽人人爽人人片AV不| 日韩精品久久久久久| 久久久久久久精品成人热色戒| 欧美亚洲另类久久综合| 色8久久人人97超碰香蕉987| 香蕉久久夜色精品国产尤物| 品成人欧美大片久久国产欧美| 久久久亚洲欧洲日产国码aⅴ | 国产激情久久久久久熟女老人| 国产叼嘿久久精品久久| 久久久久久狠狠丁香| 99久久国产热无码精品免费| 亚洲精品美女久久777777| 久久人人爽人爽人人爽av| 久久99精品国产99久久6| 91麻精品国产91久久久久| 久久久国产精品网站| www.久久热.com| 精品一区二区久久久久久久网站| 国内精品久久久久影院优| av色综合久久天堂av色综合在| 久久亚洲精品无码aⅴ大香| 精产国品久久一二三产区区别 | 中文字幕久久久久人妻| 中文字幕热久久久久久久| 色婷婷综合久久久久中文一区二区| 久久婷婷五月综合97色直播|