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

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>
            久久精品视频亚洲| 开元免费观看欧美电视剧网站| 亚洲第一在线综合在线| 久久综合精品国产一区二区三区| 亚洲大片在线| 亚洲伊人伊色伊影伊综合网| 国产中文一区| 欧美激情一二三区| 亚洲欧美一区二区原创| 亚洲福利视频一区二区| 亚洲欧美另类中文字幕| 影音先锋亚洲视频| 欧美日韩综合一区| 久久亚洲私人国产精品va| 9l视频自拍蝌蚪9l视频成人 | 狠狠色噜噜狠狠色综合久| 美女91精品| 亚洲综合视频网| 亚洲福利小视频| 午夜视频在线观看一区| 亚洲激情视频| 欧美顶级少妇做爰| 欧美在线不卡视频| 亚洲国产精品一区二区久| 国产精品嫩草影院一区二区| 久久综合色影院| 亚洲在线播放电影| 亚洲国产二区| 久久久国产精品亚洲一区| 这里只有精品丝袜| 亚洲国产日韩一区| 国模吧视频一区| 国产精品九九| 欧美日韩国产高清| 欧美成人午夜影院| 久久久www| 欧美一级久久久| 一区二区三区欧美亚洲| 亚洲日本久久| 欧美国产综合| 麻豆av一区二区三区久久| 久久高清国产| 亚洲欧美资源在线| 一区二区三区久久精品| 亚洲精品欧美日韩专区| 亚洲第一黄网| 一区二区在线观看av| 国产欧美日韩综合| 国产精品久久久一区二区三区| 欧美二区不卡| 模特精品在线| 欧美**字幕| 免费成人av在线看| 老司机午夜免费精品视频| 久久久精品五月天| 久久精品首页| 久久久久99| 久久另类ts人妖一区二区| 久久精品一区二区三区不卡| 久久精品综合| 久久一区二区三区国产精品| 久久久国产精品亚洲一区| 久久精品国产99精品国产亚洲性色 | 亚洲精品免费在线观看| 亚洲第一页中文字幕| …久久精品99久久香蕉国产| 悠悠资源网亚洲青| 在线免费观看日韩欧美| 永久555www成人免费| 亚洲电影第三页| 91久久精品国产| 日韩午夜电影| 亚洲一区视频| 欧美一区视频| 久久一区亚洲| 欧美国产精品劲爆| 最新中文字幕亚洲| 亚洲日本成人| 亚洲午夜电影网| 香蕉乱码成人久久天堂爱免费| 欧美一区国产一区| 久久久噜噜噜久噜久久| 欧美不卡在线| 国产精品黄页免费高清在线观看| 国产精品久久久久久影视| 国产日韩精品一区二区三区在线 | 午夜欧美大片免费观看| 久久久青草青青国产亚洲免观| 噜噜噜在线观看免费视频日韩| 欧美成人亚洲成人日韩成人| 最新热久久免费视频| 亚洲一级高清| 久久久不卡网国产精品一区| 欧美国产视频一区二区| 欧美性理论片在线观看片免费| 国产乱人伦精品一区二区 | 欧美色一级片| 国产精品久久久爽爽爽麻豆色哟哟| 国产精品一区二区三区观看| 国产一区二区三区奇米久涩| 亚洲国产精品毛片| 亚洲午夜国产一区99re久久| 欧美在线看片a免费观看| 美女日韩欧美| 日韩亚洲综合在线| 久久精品30| 欧美另类一区二区三区| 国产九色精品成人porny| 亚洲国产91| 亚洲伊人观看| 欧美99在线视频观看| 中文欧美日韩| 麻豆精品在线视频| 国产精品免费看片| 亚洲精品欧美激情| 久久久999精品视频| 亚洲精品影视| 久久久综合精品| 国产精品永久免费| 夜夜嗨av一区二区三区四季av| 久久精品二区三区| 日韩视频免费| 久久亚洲美女| 国产日韩欧美自拍| 宅男66日本亚洲欧美视频 | 久久国产精品99精品国产| 亚洲日本免费电影| 久久久美女艺术照精彩视频福利播放| 欧美日韩精品免费观看视频| 黄色另类av| 亚洲欧美日韩精品久久久| 亚洲二区视频| 久久精视频免费在线久久完整在线看| 国产精品ⅴa在线观看h| 亚洲三级视频| 免费视频一区| 久久国产精品99国产精| 国产精品视频免费一区| 中文精品99久久国产香蕉| 久久婷婷色综合| 亚洲欧美三级伦理| 欧美特黄一级| 99在线精品视频在线观看| 欧美高清你懂得| 久久成人羞羞网站| 国产麻豆精品在线观看| 亚洲一级在线观看| 亚洲经典在线| 欧美大片国产精品| 亚洲国产精品传媒在线观看| 久久婷婷国产综合国色天香| 欧美一区国产一区| 国产欧美日韩高清| 午夜欧美视频| 亚洲在线观看| 国产精品香蕉在线观看| 亚洲欧美国产77777| 一本色道久久99精品综合| 欧美日韩另类一区| 亚洲午夜激情免费视频| 亚洲狼人综合| 欧美日韩一区免费| 在线一区二区三区四区五区| 亚洲精选视频免费看| 欧美日韩国产欧| 亚洲午夜久久久久久尤物| 一本色道久久综合精品竹菊| 欧美日韩一区二区三区四区五区| av成人免费在线观看| 亚洲免费久久| 欧美日产在线观看| 一区二区三区波多野结衣在线观看| 亚洲精品在线观| 欧美日韩一区二区欧美激情| 亚洲免费一区二区| 午夜伦欧美伦电影理论片| 国产亚洲人成a一在线v站 | 亚洲激情欧美激情| 欧美理论在线播放| 亚洲一区二区网站| 午夜视频久久久久久| 国产日韩欧美制服另类| 蜜桃av一区二区| 欧美freesex8一10精品| 日韩一级二级三级| 亚洲午夜精品在线| 欧美日韩国产在线| 亚洲国产精品美女| 亚洲精品国产精品国自产观看浪潮 | 欧美国产高潮xxxx1819| 欧美成人国产一区二区| 99精品视频免费全部在线| 日韩视频免费观看| 国产伦理一区| 女仆av观看一区| 欧美日韩国产综合一区二区| 小黄鸭精品密入口导航| 久久久久久久97| 99精品福利视频| 亚洲一卡二卡三卡四卡五卡|