• <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.¢%

            像打了激速一樣,以四倍的速度運(yùn)轉(zhuǎn),開(kāi)心的工作
            簡(jiǎn)單、開(kāi)放、平等的公司文化;尊重個(gè)性、自由與個(gè)人價(jià)值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
            sfilter(一) sfilter的DriverEntry()?? ?的代碼

            1. 如果系統(tǒng)版本號(hào) WINVER >= 0x0501 ?則動(dòng)態(tài)加載如下的函數(shù), 并保存到 gSfDynamicFunctions?這個(gè)結(jié)構(gòu)(當(dāng)然,這個(gè)結(jié)構(gòu)是自定義的)
            ??? FsRtlRegisterFileSystemFilterCallbacks???? (詳見(jiàn) sfilter(二) - 01 注冊(cè)FsFilter回調(diào)例程?)?
            ??? IoAttachDeviceToDeviceStackSafe?? 可以將我們創(chuàng)建的設(shè)備對(duì)象 附加 到 目標(biāo)文件系統(tǒng)或卷的過(guò)濾設(shè)備堆棧之中,這樣發(fā)到目標(biāo)設(shè)備的IRP,都先發(fā)到我們的設(shè)備對(duì)象,實(shí)現(xiàn)過(guò)濾
            ??? IoEnumerateDeviceObjectList
            ??? IoGetLowerDeviceObject
            ??? IoGetDeviceAttachmentBaseRef
            ??? IoGetDiskDeviceObject
            ??? IoGetAttachedDeviceReference
            ??? RtlGetVersion
            ??? (使用的函數(shù)是 MmGetSystemRoutineAddress() 它會(huì)從Ntoskrnl.exe 或 HAL 動(dòng)態(tài)獲取到函數(shù)地址)

            2. 保存 DriverObject? 到 gSFilterDriverObject (暫不知道用來(lái)干嘛...)

            3. 如果系統(tǒng)版本號(hào) WINVER >= 0x0501??且?IoEnumerateDeviceObjectList 這個(gè)函數(shù)指針不為空...
            ??? 執(zhí)行 gSFilterDriverObject->DriverUnload = DriverUnload;?? (這里郁悶,干嘛不直接 DriverObject->DriverUnload = DriverUnload;??? ...)

            4. 初始化一個(gè)資源變量 gRulesResource (使用的是 ExInitializeResourceLite() 函數(shù))
            ExInitializeResourceLite()

            5. 初始化一個(gè)Mutex - gSfilterAttachLock (使用的是 ExInitializeFastMutex() 函數(shù))

            6. 初始化 gFsCtxLookAsideList、gFileNameLookAsideList、gReadWriteCompletionCtxLookAsideList (使用的是 ExInitializeNPagedLookasideList() 函數(shù))
            (不知道這三個(gè)用來(lái)放什么?)

            7. 創(chuàng)建一個(gè)控制設(shè)備對(duì)象(這個(gè)對(duì)象代表這個(gè)驅(qū)動(dòng)。注意它沒(méi)有設(shè)備擴(kuò)展) (用于與應(yīng)用層通信?)
            ??? 路徑是 file://FileSystem//Filters//SFilterCDO
            ??? 如果創(chuàng)建失敗,原因是路徑不在,那么就嘗試在 file://FileSystem//SFilterCDO?下創(chuàng)建

            8. DriverObject的MajorFunction? 都使用 SfPassThrough() 這個(gè)函數(shù)來(lái)過(guò)濾,而
            ??? (1) 下列 IRP 使用 SfCreate() 來(lái)過(guò)濾
            ??? IRP_MJ_CREATE
            ??? IRP_MJ_CREATE_NAMED_PIPE
            ??? IRP_MJ_CREATE_MAILSLOT?
            ????
            ??? (2) IRP_MJ_FILE_SYSTEM_CONTROL 使用 SfFsControl() 來(lái)過(guò)濾
            ????
            ?? ?(3) IRP_MJ_CLEANUP = SfCleanup;
            ????
            ??? (4)?IRP_MJ_CLOSE = SfClose;
            ?
            ??? (5) IRP_MJ_READ = SfRead;

            ????(6)?IRP_MJ_WRITE = SfWrite;
            ???
            ??? (7)?IRP_MJ_DIRECTORY_CONTROL = SfDirectoryControl;
            ?
            ??? (8) IRP_MJ_SET_INFORMATION = SfSetInformation;
            ????
            9、填充 FastIoDispatch 結(jié)構(gòu),并賦給 DriverObject
            ???????FastIoDispatch->FastIoCheckIfPossible = SfFastIoCheckIfPossible;
            ?????? FastIoDispatch->FastIoRead = SfFastIoRead;
            ?????? FastIoDispatch->FastIoWrite = SfFastIoWrite;
            ?????? FastIoDispatch->FastIoQueryBasicInfo = SfFastIoQueryBasicInfo;
            ???????FastIoDispatch->FastIoQueryStandardInfo = SfFastIoQueryStandardInfo;
            ???????FastIoDispatch->FastIoLock = SfFastIoLock;
            ???????FastIoDispatch->FastIoUnlockSingle = SfFastIoUnlockSingle;
            ???????FastIoDispatch->FastIoUnlockAll = SfFastIoUnlockAll;
            ???????FastIoDispatch->FastIoUnlockAllByKey = SfFastIoUnlockAllByKey;
            ???????FastIoDispatch->FastIoDeviceControl = SfFastIoDeviceControl;
            ???????FastIoDispatch->FastIoDetachDevice = SfFastIoDetachDevice;
            ???????FastIoDispatch->FastIoQueryNetworkOpenInfo = SfFastIoQueryNetworkOpenInfo;
            ???????FastIoDispatch->MdlRead = SfFastIoMdlRead;
            ???????FastIoDispatch->MdlReadComplete = SfFastIoMdlReadComplete;
            ???????FastIoDispatch->PrepareMdlWrite = SfFastIoPrepareMdlWrite;
            ???????FastIoDispatch->MdlWriteComplete = SfFastIoMdlWriteComplete;
            ???????FastIoDispatch->FastIoReadCompressed = SfFastIoReadCompressed;
            ???????FastIoDispatch->FastIoWriteCompressed = SfFastIoWriteCompressed;
            ???????FastIoDispatch->MdlReadCompleteCompressed = SfFastIoMdlReadCompleteCompressed;
            ???????FastIoDispatch->MdlWriteCompleteCompressed = SfFastIoMdlWriteCompleteCompressed;
            ???????FastIoDispatch->FastIoQueryOpen = SfFastIoQueryOpen;

            10、如果系統(tǒng)版本 WINVER >= 0x0501 且 RegisterFileSystemFilterCallbacks 這個(gè)函數(shù)指針不為空
            ??????? 那么通過(guò) RegisterFileSystemFilterCallbacks() 這個(gè)函數(shù)設(shè)置一些 callback (具體做什么還不知道。。。)

            ???FsFilterCallbacks.SizeOfFsFilterCallbacks = sizeof(FS_FILTER_CALLBACKS);
            ???FsFilterCallbacks.PreAcquireForSectionSynchronization = SfPreFsFilterPassThrough;
            ???FsFilterCallbacks.PostAcquireForSectionSynchronization = SfPostFsFilterPassThrough;
            ???FsFilterCallbacks.PreReleaseForSectionSynchronization = SfPreFsFilterPassThrough;
            ???FsFilterCallbacks.PostReleaseForSectionSynchronization = SfPostFsFilterPassThrough;
            ???FsFilterCallbacks.PreAcquireForCcFlush = SfPreFsFilterPassThrough;
            ???FsFilterCallbacks.PostAcquireForCcFlush = SfPostFsFilterPassThrough;
            ???FsFilterCallbacks.PreReleaseForCcFlush = SfPreFsFilterPassThrough;
            ???FsFilterCallbacks.PostReleaseForCcFlush = SfPostFsFilterPassThrough;
            ???FsFilterCallbacks.PreAcquireForModifiedPageWriter = SfPreFsFilterPassThrough;
            ???FsFilterCallbacks.PostAcquireForModifiedPageWriter = SfPostFsFilterPassThrough;
            ???FsFilterCallbacks.PreReleaseForModifiedPageWriter = SfPreFsFilterPassThrough;
            ???FsFilterCallbacks.PostReleaseForModifiedPageWriter = SfPostFsFilterPassThrough;


            11、當(dāng)一個(gè)新的文件系統(tǒng)被裝入或者當(dāng)任何文件系統(tǒng)被卸載時(shí),注冊(cè)的回調(diào)函數(shù) SfFsNotification將被調(diào)用
            ????????通過(guò)? tatus = IoRegisterFsRegistrationChange(DriverObject, SfFsNotification); 這一句來(lái)實(shí)現(xiàn)

            12、試圖附著到合適的RAW文件系統(tǒng)設(shè)備對(duì)象 \\Device\\RawDisk?和 \\Device\\RawCdRom,因?yàn)樗麄儧](méi)有被IoRegisterFsRegistrationChange枚舉
            ????? (通過(guò) IoGetDeviceObjectPointer() 函數(shù))
            ???????
            13、清除控制設(shè)備對(duì)象上的初始化標(biāo)志,因?yàn)槲覀儸F(xiàn)在成功完成初始化

            14、調(diào)用 IoRegisterDriverReinitialization

            15、打完收工!!
            狠狠色丁香婷婷久久综合不卡| 久久婷婷色综合一区二区| 2021国产成人精品久久| 久久久精品国产| 狠狠色丁香婷婷综合久久来| 婷婷国产天堂久久综合五月| 亚洲av伊人久久综合密臀性色| 久久婷婷国产麻豆91天堂| 狠狠色噜噜色狠狠狠综合久久| 久久久国产精品| 99久久无色码中文字幕| 精品多毛少妇人妻AV免费久久 | 久久人妻少妇嫩草AV无码蜜桃| 亚洲国产精品无码久久久秋霞2 | 狠狠色丁香久久婷婷综| 亚洲国产欧美国产综合久久| 色婷婷久久综合中文久久一本| 日本久久久精品中文字幕| 久久精品人人槡人妻人人玩AV| 久久亚洲精品国产亚洲老地址| 久久精品国产精品亚洲| 久久777国产线看观看精品| 久久丫精品国产亚洲av| 久久久无码精品亚洲日韩京东传媒 | 精品久久久久久久| 久久久婷婷五月亚洲97号色| 亚洲午夜久久久久妓女影院| 精品国产乱码久久久久软件| 中文字幕无码久久久| 欧美久久一级内射wwwwww.| 久久涩综合| 亚洲精品美女久久久久99小说| 欧美性猛交xxxx免费看久久久| 久久人人爽人人爽人人片AV东京热| 久久99精品国产麻豆蜜芽| 久久久久久毛片免费看| 亚洲AⅤ优女AV综合久久久| 久久久久av无码免费网| 久久久久人妻一区精品色| 久久国产乱子精品免费女| 久久se精品一区二区影院|