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

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.¢% 閱讀(2456) 評論(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>
            激情综合网址| 国产精品99久久久久久久vr| 先锋影音久久| 国产精品久久久久久超碰| 亚洲五月婷婷| 午夜精品美女久久久久av福利| 国产伦一区二区三区色一情| 久久精品国产一区二区电影| 亚洲精品三级| 亚洲免费视频在线观看| 亚洲国产精品女人久久久| 亚洲美女视频在线观看| 国产美女精品一区二区三区| 久久综合99re88久久爱| 欧美日韩一区在线观看| 久久视频国产精品免费视频在线| 欧美成人午夜激情在线| 欧美一级免费视频| 欧美人与禽性xxxxx杂性| 裸体丰满少妇做受久久99精品| 欧美精品乱码久久久久久按摩 | 亚洲伦伦在线| 久久香蕉精品| 久久久久久夜| 亚洲免费视频成人| 欧美精品国产精品| 久久亚洲精品中文字幕冲田杏梨| 国产精品系列在线| 日韩亚洲成人av在线| 99re亚洲国产精品| 欧美久久久久久| 亚洲精品日韩激情在线电影| 亚洲福利一区| 欧美高清在线观看| 亚洲国产国产亚洲一二三| 国产亚洲第一区| 亚洲神马久久| 久久亚洲精品视频| 亚洲国产精品一区二区第一页 | 亚洲综合精品一区二区| 国产精品家教| 99re国产精品| 久久九九热re6这里有精品| 国内成人自拍视频| 美女图片一区二区| 久久九九有精品国产23| 国产精品欧美日韩| 亚洲福利专区| 亚洲国产精品成人综合| 久久亚洲不卡| 午夜一区不卡| 亚洲精品影视在线观看| 久久免费视频在线观看| 亚洲三级影院| 在线看日韩欧美| 国产精品丝袜xxxxxxx| 麻豆av一区二区三区| 亚洲欧美综合国产精品一区| 亚洲国产精品视频一区| 欧美色一级片| 欧美日韩亚洲一区二区三区在线观看| 亚洲欧美在线播放| 夜夜精品视频| 亚洲伦理精品| 99天天综合性| 一区二区三区www| 亚洲精选久久| 在线视频免费在线观看一区二区| 欧美大片在线观看| 亚洲高清不卡在线观看| 久久综合久久88| 欧美二区不卡| 亚洲福利电影| 亚洲色在线视频| 香蕉国产精品偷在线观看不卡| 99精品热视频| 亚洲欧美在线一区| 久久久久一区| 欧美精品不卡| 国产一区二区三区在线观看视频| 国产亚洲观看| 日韩视频在线免费观看| 亚洲天堂成人在线视频| 欧美在线精品一区| 欧美黑人国产人伦爽爽爽| av不卡在线看| 久久手机免费观看| 国产精品网站在线| 日韩一区二区精品视频| 性欧美暴力猛交另类hd| 欧美成人一品| 午夜精品久久久久久99热软件| 久久久久久尹人网香蕉| 国产精品乱码一区二三区小蝌蚪| 最近看过的日韩成人| 欧美一级大片在线观看| 欧美久久久久中文字幕| 一区二区三区在线观看欧美| 亚洲欧美韩国| 日韩视频中午一区| 欧美高清在线视频观看不卡| 亚洲视频精选在线| 欧美国产先锋| 亚洲人精品午夜| 亚洲电影免费观看高清| 久久精品人人做人人爽| 国产精品露脸自拍| 欧美亚洲网站| 性欧美videos另类喷潮| 国产欧美日韩亚州综合| 久久久91精品国产一区二区三区| 亚洲欧美日韩国产一区二区三区 | 亚洲精品看片| 欧美日韩一区二区在线观看| 夜夜爽av福利精品导航| 日韩午夜激情电影| 国产精品欧美日韩一区| 久久中文久久字幕| 男人的天堂亚洲| 亚洲欧美日韩精品久久久久 | 欧美成人一区二区三区在线观看| 欧美成人午夜激情在线| 国自产拍偷拍福利精品免费一| 欧美一级淫片aaaaaaa视频| 欧美一区二区视频97| 伊人夜夜躁av伊人久久| 日韩视频免费在线| 国产综合久久久久久| 亚洲精品少妇| 在线精品视频在线观看高清| 亚洲人成网站777色婷婷| 国产欧美日韩高清| 91久久中文字幕| 国产自产在线视频一区| 9久草视频在线视频精品| 狠狠v欧美v日韩v亚洲ⅴ| av成人老司机| 亚洲美女在线一区| 美女久久网站| 免费观看久久久4p| 国产一级精品aaaaa看| 亚洲视频网在线直播| 亚洲一区二区欧美| 欧美日韩国产区| 黄色一区二区三区| 欧美在线影院| 久久久久在线| 亚洲福利视频免费观看| 久久久久国内| 亚洲国产精彩中文乱码av在线播放| 国产亚洲福利| 蜜桃av一区二区在线观看| 免费视频亚洲| 日韩午夜在线| 国产精品综合| 久久久久久成人| 99国产精品| 久久精品国产久精国产一老狼| 国产欧美亚洲视频| 久久夜色精品一区| 亚洲精选一区| 久久夜色精品国产| 亚洲精品一区在线| 国产精品午夜在线观看| 久久精品免费播放| 亚洲人成77777在线观看网| 亚洲午夜久久久久久久久电影网| 国产精品亚洲一区| 欧美成人精品1314www| 亚洲一级二级| 亚洲黄色有码视频| 久久只有精品| 亚洲毛片在线观看| 狠狠狠色丁香婷婷综合激情| 欧美久久视频| 免费欧美网站| 久久久久综合一区二区三区| 在线亚洲一区观看| 91久久国产综合久久91精品网站| 久久精品99无色码中文字幕 | 久久这里有精品15一区二区三区| 亚洲视频免费看| 一区二区欧美在线观看| 亚洲伦理在线免费看| 亚洲经典视频在线观看| 亚洲电影在线播放| 在线免费观看日本一区| 尹人成人综合网| 激情欧美一区| 亚洲精品国精品久久99热一| 亚洲国产精彩中文乱码av在线播放| 激情成人综合| 亚洲国产天堂久久综合| 亚洲三级电影全部在线观看高清| 狂野欧美一区| 欧美精品一区二区视频 | 国产亚洲免费的视频看| 国产午夜精品美女视频明星a级| 国产精品一区二区在线观看网站| 国产精品视屏|