青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

S.l.e!ep.¢%

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

CreateService加載驅(qū)動過程

Posted on 2009-10-30 08:10 S.l.e!ep.¢% 閱讀(2461) 評論(1)  編輯 收藏 引用 所屬分類: Windows WDM
CreateService加載驅(qū)動過程
2009-07-30 21:56

用instDrv加載驅(qū)動,用CreateService()函數(shù)等等過程如下,

1,先是它向Service進程注冊服務(wù)。

2,然后Service進程調(diào)用ZwLoadDriver()加載驅(qū)動。進入NtLoadDriver()系統(tǒng)調(diào)用,它先會檢測SerVice進程(當(dāng)前進程)是不是有加載驅(qū)動的權(quán)限,然后檢測當(dāng)前進程是不是System進程,是的話直接調(diào)用IopLoadUnloadDriver()加載驅(qū)動,-》IopLoadDriver()最后會調(diào)用驅(qū)動的DriverEntry(),所以這種方法加載驅(qū)動的DriverEntry()函數(shù)是在System進程的地址空間執(zhí)行的。

如果當(dāng)前進程不是System進程的話,則調(diào)用如下的函數(shù),向system進程的系統(tǒng)線程的工作隊列中插入這項,函數(shù)為IopLoadUnloadDriver(),也就是說系統(tǒng)線程會替它調(diào)用IopLoadUnloadDriver()函數(shù)

ExInitializeWorkItem( &loadPacket.WorkQueueItem,
????????????????????????????? IopLoadUnloadDriver,
????????????????????????????? &loadPacket ); ExQueueWorkItem( &loadPacket.WorkQueueItem, DelayedWorkQueue );

IopLoadUnloadDriver會調(diào)用IopLoadDriver()做真正的加載驅(qū)動的工作

1,先根據(jù)鍵句柄調(diào)用NtQueryKey()函數(shù)得到驅(qū)動的全路徑名。

2,循環(huán)檢查PsLoadedModuleList內(nèi)核模塊鏈表看是不是這個驅(qū)動已經(jīng)加載

3.調(diào)用 status = MmLoadSystemImage( &baseName,
??????????????????????????????? NULL,
??????????????????????????????? NULL,
??????????????????????????????? 0,
??????????????????????????????? &sectionPointer,
??????????????????????????????? (PVOID *) &imageBaseAddress );
?? 這函數(shù)里面會調(diào)用 InitializeObjectAttributes (&ObjectAttributes,
??????????????????????????????????? ImageFileName,
??????????????????????????????????? (OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE),
??????????????????????????????????? NULL,
??????????????????????????????????? NULL);

??????? Status = ZwOpenFile (&FileHandle,
???????????????????????????? FILE_EXECUTE,
???????????????????????????? &ObjectAttributes,
???????????????????????????? &IoStatus,
???????????????????????????? FILE_SHARE_READ | FILE_SHARE_DELETE,
???????????????????????????? 0);?? //返回句柄為0x80000140
函數(shù)根據(jù)驅(qū)動文件名打開文件,向system進程的句柄表中插入一項,返回句柄表的下標(biāo),就是文件句柄(這里是內(nèi)核句柄))

Status = MmCheckSystemImage (FileHandle, FALSE);//這個函數(shù)是檢查這個PE文件各個節(jié)看是不是好的。
最后調(diào)用

InitializeObjectAttributes (&ObjectAttributes,
??????????????????????????????????? NULL,
??????????????????????????????????? (OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE),
??????????????????????????????????? NULL,
??????????????????????????????????? NULL);

??????? Status = ZwCreateSection (&SectionHandle,
????????????????????????????????? SectionAccess,
????????????????????????????????? &ObjectAttributes,
????????????????????????????????? (PLARGE_INTEGER) NULL,
????????????????????????????????? PAGE_EXECUTE,
????????????????????????????????? SEC_IMAGE,
????????????????????????????????? FileHandle);
建立節(jié)對象向system進程句柄表中插入一項,返回句柄為0x80000170

Status = ObReferenceObjectByHandle (SectionHandle,
??????????????????????????????????????????? SECTION_MAP_EXECUTE,
??????????????????????????????????????????? MmSectionObjectType,
??????????????????????????????????????????? KernelMode,
??????????????????????????????????????????? (PVOID *) &SectionPointer,
??????????????????????????????????????????? (POBJECT_HANDLE_INFORMATION) NULL);//根據(jù)句柄從system進程句柄中找到節(jié)對象的地址。

??????? ZwClose (SectionHandle);//把此句柄關(guān)了,會從system 進程句柄中刪除一項。下次訪問節(jié)對象時就通過地址來訪問。不用句柄。

調(diào)用 Status = MiLoadImageSection (&SectionPointer,
???????????????????????????????? ImageBaseAddress,
???????????????????????????????? ImageFileName,
???????????????????????????????? LoadFlags & MM_LOAD_IMAGE_IN_SESSION,
???????????????????????????????? FoundDataTableEntry);
進行真正的文件映射它里面會調(diào)用 MmMapViewOfSection (SectionPointer,TargetProcess(system),
???????????????????????????????? &Base,
???????????????????????????????? 0,
???????????????????????????????? 0,
???????????????????????????????? &SectionOffset,
???????????????????????????????? &ViewSize,
???????????????????????????????? ViewUnmap,
???????????????????????????????? 0,
???????????????????????????????? PAGE_EXECUTE);
進行文件映射,返回基址為0xba377000

最后分配 PKLDR_DATA_TABLE_ENTRY DataTableEntry;
初始化它,最后調(diào)用 MiProcessLoaderEntry (DataTableEntry, TRUE);
把它個內(nèi)核模塊結(jié)構(gòu)加入PsLoadModuleList鏈表中等等,還會處理這個驅(qū)動的Reference等等

4,調(diào)用??? status = ObCreateObject( KeGetPreviousMode(),
???????????????????????????? IoDriverObjectType,
???????????????????????????? &objectAttributes,
???????????????????????????? KernelMode,
???????????????????????????? (PVOID) NULL,
???????????????????????????? (ULONG) (sizeof( DRIVER_OBJECT ) + sizeof ( DRIVER_EXTENSION )),
???????????????????????????? 0,
???????????????????????????? 0,
???????????????????????????? (PVOID *) &driverObject );建立驅(qū)動對象

初始化驅(qū)動對象后,調(diào)用 status = ObInsertObject( driverObject,
???????????????????????????? (PACCESS_STATE) NULL,
???????????????????????????? FILE_READ_DATA,
???????????????????????????? 0,
???????????????????????????? (PVOID *) NULL,
???????????????????????????? &driverHandle );把驅(qū)動對象插入到system進程的句柄表的一項,返回句柄,注意這個函數(shù)還會把這對象插入對象目錄中。

5,最后會調(diào)用 status = driverObject->DriverInit( driverObject, &registryPath->Name );也就是DriverEntry()函數(shù)。

Feedback

# re: CreateService加載驅(qū)動過程  回復(fù)  更多評論   

2015-04-29 13:11 by peace
可以在內(nèi)核太下直接調(diào)用這些函數(shù)來加載嗎?
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美一区二区视频免费观看| 午夜在线视频观看日韩17c| 一本一本久久a久久精品综合妖精| 国产欧美一区二区三区在线看蜜臀 | 久久国产欧美日韩精品| 亚洲一区二区黄| 亚洲一本大道在线| 亚洲专区在线视频| 欧美一区二区三区婷婷月色| 亚洲一区二区在线视频| 亚洲欧美国产毛片在线| 性欧美大战久久久久久久久| 久久激情一区| 免费视频一区| 欧美日韩一区二区在线| 国产精品视频久久久| 在线观看欧美精品| 亚洲婷婷在线| 久久亚洲欧美| 亚洲人体大胆视频| 亚洲毛片在线观看.| 亚洲午夜激情在线| 久久综合一区二区| 国产精品久99| 91久久久久久| 久久免费高清视频| 日韩一区二区福利| 久久婷婷蜜乳一本欲蜜臀| 久久字幕精品一区| 亚洲国产精品成人精品| 亚洲国产三级网| 亚洲欧美日韩高清| 欧美久久久久久| 国产精品乱子久久久久| 亚洲高清毛片| 久久香蕉精品| 性欧美办公室18xxxxhd| 国产精品国产三级国产aⅴ浪潮| 亚洲电影免费观看高清| 久久久伊人欧美| 欧美一乱一性一交一视频| 欧美伦理视频网站| 亚洲国产精品成人久久综合一区| 性欧美video另类hd性玩具| 一本久久精品一区二区| 欧美日韩国产高清视频| 亚洲日本成人网| 久久久久久久综合| 午夜精品亚洲| 国产日韩av在线播放| 激情久久综艺| 亚洲人成人一区二区三区| 亚洲第一级黄色片| 欧美日韩国产不卡| 亚洲欧美综合精品久久成人| 亚洲一级片在线观看| 国产亚洲二区| 欧美成人在线影院| 欧美日韩亚洲综合在线| 久久精品国产v日韩v亚洲 | 亚洲精品美女| 国产精品推荐精品| 久久亚洲视频| 国产九区一区在线| 亚洲观看高清完整版在线观看| 欧美精品v国产精品v日韩精品| 一区二区三区产品免费精品久久75| 一区二区三区高清视频在线观看| 国产欧美一区视频| 亚洲精品久久久久久久久久久| 国产精品久久久久影院亚瑟| 久久夜色精品| 国产精品看片你懂得| 欧美日韩综合不卡| 欧美在线一二三| 欧美日韩八区| 欧美成人嫩草网站| 国产午夜精品麻豆| 91久久综合| 亚洲第一福利视频| 午夜在线a亚洲v天堂网2018| 亚洲一二三区在线观看| 欧美xart系列高清| 蜜桃av一区二区在线观看| 国产精品青草久久久久福利99| 亚洲国产欧美日韩精品| 亚洲高清资源| 欧美资源在线| 美日韩免费视频| 黄色成人片子| 久久久久国产精品一区二区| 久久精品国产一区二区三区免费看| 欧美色区777第一页| 一二三四社区欧美黄| 久久riav二区三区| 久久国产欧美| 国产亚洲一级高清| 久久久久久久综合日本| 玖玖综合伊人| 亚洲电影在线免费观看| 久久综合激情| 91久久视频| 午夜久久电影网| 国产原创一区二区| 久久久久国产一区二区| 麻豆freexxxx性91精品| 一道本一区二区| 午夜精品久久久久99热蜜桃导演| 国产精品久久久久影院亚瑟 | 国产精品久久久久av| 中文日韩在线| 久久免费一区| 一本不卡影院| 国产亚洲在线观看| 牛夜精品久久久久久久99黑人| 亚洲激情一区二区| 欧美有码在线观看视频| 亚洲国产日韩综合一区| 国产精品色午夜在线观看| 免费成人网www| 一区二区三区国产在线观看| 国产片一区二区| 欧美激情中文不卡| 久久精品国产亚洲高清剧情介绍| 亚洲乱码久久| 欧美成人免费在线视频| 亚洲永久免费精品| 亚洲国产片色| 国产三区二区一区久久| 欧美日韩综合视频网址| 免费观看30秒视频久久| 欧美亚洲视频在线看网址| 99av国产精品欲麻豆| 亚洲电影网站| 欧美二区视频| 欧美jizz19hd性欧美| 久久久视频精品| 久久国产精品电影| 国产精品福利在线观看| 久久久综合网站| 欧美在线亚洲在线| 久久国产精品高清| 久久中文在线| 欧美激情精品久久久六区热门 | 亚洲一区二区三区午夜| 亚洲激情中文1区| 最新高清无码专区| 91久久极品少妇xxxxⅹ软件| 亚洲激情在线视频| 亚洲美女免费视频| 欧美激情四色| 亚洲免费观看在线观看| 亚洲网在线观看| 欧美一区二区三区免费大片| 午夜精品短视频| 久久―日本道色综合久久| 欧美成va人片在线观看| 欧美精品在线视频| 国产精品外国| 亚洲欧洲在线免费| 亚洲一区二区三区三| 久久精品免费电影| 亚洲黄色一区二区三区| 99精品视频免费全部在线| 欧美影片第一页| 欧美日韩大陆在线| 国内不卡一区二区三区| 亚洲毛片在线免费观看| 久久国产日韩欧美| 亚洲黄色片网站| 亚洲欧美日韩人成在线播放| 久久精选视频| 国产精品对白刺激久久久| 影音先锋日韩资源| 亚洲欧美日韩精品一区二区| 欧美 日韩 国产在线| 亚洲一区二区毛片| 欧美a级理论片| 在线观看成人av电影| 欧美呦呦网站| 亚洲一品av免费观看| 欧美日韩精品久久| 亚洲精品免费一二三区| 可以看av的网站久久看| 亚洲欧洲av一区二区| 国产精品极品美女粉嫩高清在线| 亚洲级视频在线观看免费1级| 狼人天天伊人久久| 欧美在线观看一区二区三区| 亚洲高清资源综合久久精品| 久久综合久久综合久久| 黄色在线成人| 久久免费视频在线| 久久精品国产在热久久| 国产一区二区三区不卡在线观看| 久久国产毛片| 久久蜜桃资源一区二区老牛| 亚洲电影自拍| 亚洲激情黄色| 国产精品手机视频|