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

S.l.e!ep.¢%

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

CreateService加載驅動過程

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

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

1,先是它向Service進程注冊服務。

2,然后Service進程調用ZwLoadDriver()加載驅動。進入NtLoadDriver()系統調用,它先會檢測SerVice進程(當前進程)是不是有加載驅動的權限,然后檢測當前進程是不是System進程,是的話直接調用IopLoadUnloadDriver()加載驅動,-》IopLoadDriver()最后會調用驅動的DriverEntry(),所以這種方法加載驅動的DriverEntry()函數是在System進程的地址空間執行的。

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

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

IopLoadUnloadDriver會調用IopLoadDriver()做真正的加載驅動的工作

1,先根據鍵句柄調用NtQueryKey()函數得到驅動的全路徑名。

2,循環檢查PsLoadedModuleList內核模塊鏈表看是不是這個驅動已經加載

3.調用 status = MmLoadSystemImage( &baseName,
??????????????????????????????? NULL,
??????????????????????????????? NULL,
??????????????????????????????? 0,
??????????????????????????????? &sectionPointer,
??????????????????????????????? (PVOID *) &imageBaseAddress );
?? 這函數里面會調用 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
函數根據驅動文件名打開文件,向system進程的句柄表中插入一項,返回句柄表的下標,就是文件句柄(這里是內核句柄))

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

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

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

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

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

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

最后分配 PKLDR_DATA_TABLE_ENTRY DataTableEntry;
初始化它,最后調用 MiProcessLoaderEntry (DataTableEntry, TRUE);
把它個內核模塊結構加入PsLoadModuleList鏈表中等等,還會處理這個驅動的Reference等等

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

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

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

Feedback

# re: CreateService加載驅動過程  回復  更多評論   

2015-04-29 13:11 by peace
可以在內核太下直接調用這些函數來加載嗎?
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲激情午夜| 亚洲欧洲一二三| 揄拍成人国产精品视频| 久久久久成人网| 国产精品xxx在线观看www| 亚洲午夜伦理| 欧美一区成人| 91久久精品一区| 国产精品国产三级国产aⅴ9色| 欧美成人午夜77777| 国产精品成人一区| 欧美吻胸吃奶大尺度电影| 亚洲社区在线观看| 性色av一区二区三区| 9国产精品视频| 欧美午夜久久久| 欧美大片在线观看一区| 午夜精品久久久久久久久久久久久| 韩国av一区二区三区| 国产精品99免视看9| 久久久久国产精品午夜一区| 亚洲精品国产精品国自产观看| 国产亚洲精品aa午夜观看| 亚洲国产你懂的| 久久久夜夜夜| 久久综合久色欧美综合狠狠| 亚洲清纯自拍| 国产精品五月天| 99精品国产99久久久久久福利| 午夜国产精品影院在线观看| 性色av一区二区三区红粉影视| 亚洲黑丝在线| 在线一区二区日韩| 欧美不卡在线视频| 欧美国产另类| 亚洲国产美女| 亚洲黄色在线| 亚洲国产女人aaa毛片在线| 亚洲一区二区在线免费观看视频 | 亚洲图片欧美日产| 翔田千里一区二区| 亚洲高清在线观看一区| 性视频1819p久久| 欧美激情综合| 亚洲黄色毛片| 老司机亚洲精品| 午夜一区二区三区在线观看| 欧美日韩视频不卡| 日韩午夜在线| 亚洲国产精品一区| 猛男gaygay欧美视频| 曰韩精品一区二区| 久久在线免费观看视频| 性8sex亚洲区入口| 国产日韩一区二区| 欧美在线视频免费观看| 亚洲伊人观看| 国产精品美女久久福利网站| 亚洲一区国产视频| 中日韩男男gay无套| 欧美午夜无遮挡| 亚洲一区二区三区午夜| 一区二区三区www| 国产精品国产三级国产专区53 | 日韩午夜电影| 亚洲欧洲精品一区二区三区| 久久久久久9| 欧美在线综合| 精品动漫3d一区二区三区免费版 | 亚洲国产精品精华液网站| 日韩午夜激情av| 欧美日韩国内| 亚洲综合不卡| 亚洲免费视频成人| 国产婷婷成人久久av免费高清 | 欧美一区二区视频观看视频| 国产日韩一区二区三区在线播放| 欧美一区二区三区在线视频| 欧美一区二区大片| 亚洲国产精品成人久久综合一区| 欧美激情a∨在线视频播放| 欧美韩日高清| 亚洲免费在线视频| 久久精品一区二区三区不卡牛牛| 伊人婷婷久久| 最新国产の精品合集bt伙计| 欧美视频在线不卡| 美国成人直播| 欧美日韩1080p| 久久精品国产清自在天天线| 麻豆国产精品777777在线| 一本一本久久a久久精品综合妖精| 一本大道久久a久久精二百| 国产乱码精品一区二区三| 免费在线观看精品| 国产精品久久久久久久7电影| 久久久午夜精品| 欧美日韩国产综合在线| 久久久青草青青国产亚洲免观| 欧美国产日韩二区| 久久理论片午夜琪琪电影网| 欧美激情一区二区久久久| 久久精品人人做人人爽| 欧美激情一区三区| 麻豆av一区二区三区久久| 欧美天堂在线观看| 亚洲福利免费| 尤妮丝一区二区裸体视频| 这里只有精品丝袜| 亚洲精品少妇| 久久综合色综合88| 久久精品动漫| 国产精品美女在线| 日韩天堂av| 日韩视频一区二区在线观看 | 亚洲男人影院| 欧美黄色片免费观看| 欧美在线免费| 欧美体内she精视频| 男人的天堂亚洲| 国产亚洲欧美一区| 亚洲一区二区三区乱码aⅴ| 一本不卡影院| 欧美激情亚洲精品| 欧美电影免费| 亚洲高清av| 久久伊人一区二区| 久久嫩草精品久久久精品| 国产精品自在在线| 亚洲香蕉视频| 久久国产精品99久久久久久老狼| 国产精品99免视看9| 一本色道久久综合狠狠躁的推荐| 亚洲人成亚洲人成在线观看图片| 久久性天堂网| 欧美激情视频一区二区三区在线播放 | 99视频+国产日韩欧美| 亚洲特黄一级片| 国产精品av一区二区| 一本久道久久久| 亚洲综合首页| 国产精品丝袜91| 欧美一区二区三区电影在线观看 | 91久久久久久久久久久久久| 亚洲精品黄网在线观看| 欧美巨乳波霸| 一区二区日韩伦理片| 午夜精品影院| 激情欧美丁香| 欧美美女bb生活片| 亚洲在线视频网站| 久久免费高清| 亚洲国产欧美一区二区三区同亚洲 | 欧美精品在线视频| 在线一区日本视频| 久久gogo国模裸体人体| 国产伪娘ts一区| 久久亚洲视频| 日韩视频免费观看高清在线视频| 亚洲欧美国产精品va在线观看| 国产伦精品一区二区三| 久久天天狠狠| 夜夜嗨一区二区三区| 久久亚洲精品视频| 99re66热这里只有精品3直播| 国产精品chinese| 久久久天天操| 亚洲天堂av图片| 毛片基地黄久久久久久天堂| 一区二区三区免费观看| 国产亚洲精品久| 欧美国产一区在线| 久久国产精品免费一区| 最近中文字幕日韩精品| 久久xxxx精品视频| 一本色道久久88综合亚洲精品ⅰ| 国产偷久久久精品专区| 欧美—级高清免费播放| 午夜精品成人在线| 亚洲精品国产精品国自产观看| 久久se精品一区二区| 日韩视频一区二区三区在线播放免费观看 | 老司机免费视频一区二区| 在线一区亚洲| 亚洲国产精品女人久久久| 欧美视频在线视频| 久久乐国产精品| 亚洲一区二区欧美日韩| 亚洲国产精品久久久久秋霞影院| 欧美一区国产二区| 一区二区日韩伦理片| 在线看欧美日韩| 国产拍揄自揄精品视频麻豆| 欧美日韩国产色视频| 久久久久久久高潮| 欧美一级视频| 亚洲综合国产| 一本色道久久综合精品竹菊| 欧美激情一区二区三区| 理论片一区二区在线|