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

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>
            久久久久久久一区二区| 国产日韩欧美a| 亚洲一区二区三区四区五区午夜| 欧美国产高潮xxxx1819| 久久久久久久久久看片| 久久综合图片| 亚洲国产精品日韩| 亚洲国产激情| 亚洲午夜电影| 久久精品99久久香蕉国产色戒| 久久精品天堂| 欧美理论电影在线播放| 欧美日韩精选| 激情成人亚洲| 亚洲精品男同| 欧美尤物一区| 亚洲高清资源综合久久精品| 亚洲精品视频在线看| 午夜亚洲伦理| 欧美国产亚洲精品久久久8v| 欧美视频一区二区三区在线观看| 国产欧美韩国高清| 亚洲精选一区| 久久精品国产免费看久久精品| 欧美高清一区| 午夜精品偷拍| 欧美精品一区二区三区在线播放| 国产精品久久久久一区二区三区共| 国内揄拍国内精品少妇国语| 亚洲美女视频在线观看| 亚洲欧美日韩在线一区| 欧美国产免费| 欧美一区二区视频在线观看| 欧美日本不卡| 亚洲国产成人久久综合一区| 校园春色国产精品| 亚洲七七久久综合桃花剧情介绍| 亚洲自拍偷拍麻豆| 欧美日韩成人综合天天影院| 亚洲大片av| 欧美在线视频一区二区三区| 欧美国产日韩精品| 久久天天躁狠狠躁夜夜av| 国产乱码精品| 香蕉久久国产| 在线亚洲精品福利网址导航| 欧美国产在线观看| 91久久国产综合久久91精品网站| 久久狠狠亚洲综合| 亚洲专区免费| 国产精品久久久久久久久久久久久久 | 欧美理论电影在线观看| 狠狠久久亚洲欧美专区| 亚洲综合二区| 亚洲色图自拍| 国产精品久久久久久久第一福利| 99精品视频免费观看视频| 欧美顶级少妇做爰| 欧美不卡在线视频| 亚洲精品久久久久久久久久久久| 亚洲电影免费观看高清| 久久综合精品国产一区二区三区| 韩国欧美一区| 久久永久免费| 久久久一本精品99久久精品66| 国产偷久久久精品专区| 久久久久88色偷偷免费| 久久九九国产精品| 亚洲国产激情| 亚洲国产1区| 欧美色大人视频| 香蕉久久夜色精品国产| 久久不射中文字幕| 91久久国产自产拍夜夜嗨| 欧美激情视频免费观看| 欧美激情精品久久久久久黑人| 一区二区91| 性亚洲最疯狂xxxx高清| 激情懂色av一区av二区av| 欧美大片在线观看一区二区| 欧美激情亚洲激情| 亚洲欧美日韩精品在线| 欧美中文在线视频| 91久久精品美女| 一区二区成人精品 | 99在线热播精品免费99热| 国产精品成人免费精品自在线观看| 亚洲一区二区三区四区视频| 午夜久久久久久| 亚洲国产高清在线| 在线亚洲欧美视频| 在线电影院国产精品| 亚洲国产毛片完整版| 国产精品久久久久9999| 美日韩精品视频| 欧美性感一类影片在线播放| 久久久国产精品一区二区三区| 欧美sm视频| 久久国产精品一区二区三区| 久久综合狠狠综合久久综青草| 亚洲无人区一区| 久久久视频精品| 午夜精品久久久99热福利| 欧美在线首页| 欧美天天在线| 亚洲韩国青草视频| 亚洲图片自拍偷拍| 亚洲国产精品美女| 中文久久乱码一区二区| 亚洲国产精品久久久久秋霞影院| 亚洲婷婷在线| 夜夜嗨av色综合久久久综合网| 欧美在线视频a| 亚洲欧美另类在线| 欧美激情一区二区三区四区| 久久婷婷亚洲| 国产精品亚洲综合| 亚洲精品无人区| 亚洲国产99| 久久久久综合网| 久久精品亚洲国产奇米99| 欧美日韩成人一区| 欧美激情第六页| 亚洲大片在线| 久久久久成人精品免费播放动漫| 欧美亚洲视频在线看网址| 欧美视频一区二区在线观看| 91久久精品日日躁夜夜躁欧美| 一区二区三区在线视频观看| 欧美一级日韩一级| 欧美在线免费看| 国产欧美精品va在线观看| 亚洲私人黄色宅男| 亚洲欧美日韩在线播放| 国产精品久久久久久妇女6080| 日韩午夜中文字幕| 亚洲一区影院| 国产精品毛片一区二区三区| 一区二区三区你懂的| 亚洲一区二区三区四区视频 | 国产日韩欧美一二三区| 亚洲欧美激情视频| 欧美一区久久| 狠狠色丁香久久婷婷综合丁香| 西西人体一区二区| 久久久久**毛片大全| 国产一区视频观看| 久久精品五月婷婷| 欧美激情一区二区三区高清视频| 亚洲国产清纯| 欧美日韩高清区| 亚洲午夜小视频| 久久精品国产清高在天天线| 国产亚洲精品资源在线26u| 久久久久五月天| 亚洲国产精品精华液2区45| 亚洲精品国产精品久久清纯直播| 欧美日韩成人免费| 欧美亚洲在线观看| 亚洲电影网站| 亚洲一区三区电影在线观看| 国产精品日韩在线| 欧美在线观看一区| 亚洲国产aⅴ天堂久久| 亚洲图片在线观看| 国产一区二区三区免费观看| 久久久噜噜噜久久狠狠50岁| 亚洲国产欧美一区二区三区久久| 99综合在线| 国产一区二区精品久久| 久热精品视频在线免费观看| 夜夜嗨一区二区三区| 亚洲主播在线观看| 亚洲国产99| 欧美一二三区在线观看| 狠色狠色综合久久| 欧美日韩精品在线| 欧美中在线观看| 亚洲精品一二| 免费日韩成人| 午夜一区在线| 日韩午夜激情av| 国内精品伊人久久久久av影院| 免费观看在线综合色| 亚洲一二区在线| 亚洲国产成人精品女人久久久| 午夜激情综合网| 一本大道久久a久久综合婷婷| 国内在线观看一区二区三区| 欧美午夜在线一二页| 男女精品网站| 欧美一乱一性一交一视频| 亚洲激情电影在线| 美日韩在线观看| 久久精品免费观看| 欧美一区二区三区久久精品茉莉花| 亚洲国产精品一区在线观看不卡 | 久久久九九九九| 亚洲欧美色婷婷| 亚洲视频一区|