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

posts - 23,  comments - 20,  trackbacks - 0
驅(qū)動(dòng)其實(shí)很早以前就寫了  只不過(guò)功能沒(méi)有達(dá)到  加上一直很忙 所以就放下了 今天閑著無(wú)聊  就接著寫吧...
寫完了 發(fā)上來(lái) 留著 主要的問(wèn)題就是效率很低下   不知道為什么有大量的IRP_MJ_DEVICE_CONTROL 這個(gè)IRP  CPU全部占滿

程序很簡(jiǎn)單  暴力枚舉 主要是鍛煉一下內(nèi)核編程 以及WinDbg的調(diào)試
頭文件
 1 /*******************************************************************************
 2 *文件名稱: MyDDK.h 
 3 *作       者:  李佳
 4 *完成日期: 09.7.29
 5 *******************************************************************************/
 6 #pragma once
 7 
 8 #ifdef   __cplusplus
 9 extern "C"
10 {
11 #endif
12 #include <ntddk.h>
13     //使用RtlStringCchPrintfW
14 #include <ntstrsafe.h>
15 #pragma comment(lib , "ntstrsafe.lib")
16 #ifdef  __cplusplus
17 }
18 #endif
19 
20 #define PAGEDCODE        code_seg("PAGE")
21 #define LOCKEDCODE        code_seg()
22 #define INITCODE            code_seg("INIT")
23 
24 #define PAGEDDATA        date_seg("PAGE")
25 #define LOCKEDDATA        date_seg()
26 #define INITDATA            date_seg("INIT")
27 
28 #define arraysize(p)            (sizeof(p) / sizeof((p)[0]))
29 
30 typedef struct _DEVICE_EXTENSION
31 {
32     PDEVICE_OBJECT pDevice;
33     UNICODE_STRING ustrDeviceName;        //設(shè)備名稱
34     UNICODE_STRING ustrSysLinkName;        //鏈接名稱
35 }DEVICE_EXTENSION , *PDEVICE_EXTENSION;
36 
37 //函數(shù)聲明
38 //創(chuàng)建設(shè)備
39 NTSTATUS CreateDevice(IN PDRIVER_OBJECT pDriverObject);
40 //卸載例程
41 VOID HelloDDKUnload(IN PDRIVER_OBJECT pDriverObject);
42 //默認(rèn)IRP處理例程
43 NTSTATUS HelloDDKDispatchRoutine(    IN PDEVICE_OBJECT pDeviceObject ,
44                                                 IN PIRP Irp);
45 //綁定所有COM端口
46 VOID AttachAllComs(PDRIVER_OBJECT Driver);
47 //打開COM端口
48 PDEVICE_OBJECT OpenCom(ULONG id , NTSTATUS * status);
49 //綁定COM口
50 NTSTATUS AttachDevice(    PDRIVER_OBJECT pDriver , 
51                                 PDEVICE_OBJECT pOldDeviceObj ,
52                                 PDEVICE_OBJECT * pNewDeviceObj ,
53                                 PDEVICE_OBJECT* pNext);

實(shí)現(xiàn)文件
  1 /*****************************************************************************
  2 *文件名稱: MyDDK.cpp
  3 *作        者: 李佳
  4 *完成日期: 09.7.29
  5 ****************************************************************************/
  6 #include "MyDDK.h"
  7 
  8 #define  MAX_COM_NUM 32        //最大COM數(shù)
  9 static PDEVICE_OBJECT fltDevObj[MAX_COM_NUM] = {0};    //過(guò)濾設(shè)備的指針
 10 static PDEVICE_OBJECT realDevObj[MAX_COM_NUM] = {0};    //真實(shí)設(shè)備的指針
 11 /***************************************************************************
 12 *函數(shù)名稱: DriverEntry
 13 *功能描述: 驅(qū)動(dòng)程序的入口函數(shù)
 14 *參數(shù)列表: pDriverObject : I/O管理器中傳遞進(jìn)來(lái)的驅(qū)動(dòng)對(duì)象
 15 *             pRegistryPath : 驅(qū)動(dòng)程序在注冊(cè)表中的存儲(chǔ)路徑
 16 *返  回  值: 返回初始化驅(qū)動(dòng)的執(zhí)行狀態(tài)
 17 **************************************************************************/
 18 #pragma INITCODE
 19 extern "C" DriverEntry(IN PDRIVER_OBJECT pDriverObject , 
 20                  IN PUNICODE_STRING pRegistryPath)
 21 {
 22     NTSTATUS status;
 23     KdPrint(("Enter DriverEntry!\n"));
 24     size_t i = 0;
 25     for (i = 0 ; i < IRP_MJ_MAXIMUM_FUNCTION ; i++)
 26     {
 27         pDriverObject->MajorFunction[i] = HelloDDKDispatchRoutine;
 28     }
 29     pDriverObject->DriverUnload = HelloDDKUnload;    //卸載例程入口
 30     /*pDriverObject->MajorFunction[IRP_MJ_CREATE] = HelloDDKDispatchRoutine;
 31     pDriverObject->MajorFunction[IRP_MJ_READ] = HelloDDKDispatchRoutine;
 32     pDriverObject->MajorFunction[IRP_MJ_WRITE] = HelloDDKDispatchRoutine;
 33     pDriverObject->MajorFunction[IRP_MJ_CLOSE] = HelloDDKDispatchRoutine;
 34 
 35     status = CreateDevice(pDriverObject);*/
 36     AttachAllComs(pDriverObject);    //綁定COM 
 37     KdPrint(("Leave DriverEntry!\n"));
 38     return STATUS_SUCCESS;
 39 }
 40 
 41 /***************************************************************************
 42 *函數(shù)名稱: HelloDDKUnload
 43 *功能描述: 負(fù)責(zé)卸載驅(qū)動(dòng)
 44 *參數(shù)列表: pDriverObject : I/O管理器中傳遞進(jìn)來(lái)的驅(qū)動(dòng)對(duì)象
 45 *返  回  值: 返回函數(shù)執(zhí)行結(jié)果
 46 **************************************************************************/
 47 #pragma  PAGEDCODE
 48 VOID HelloDDKUnload(IN PDRIVER_OBJECT pDriverObject)
 49 {
 50     ULONG i = 0 ;
 51     LARGE_INTEGER intervel;
 52 
 53     //解除設(shè)備鎖定
 54     for (i = 0 ; i < MAX_COM_NUM ; i++)
 55     {
 56         if (realDevObj[i] != NULL)
 57             IoDetachDevice(realDevObj[i]);        
 58     }
 59 
 60     //等待所有IRP完成
 61 #define DELAY_ONE_MICROSECOND (-10)
 62 #define DELAY_ONE_MILLSECOND (DELAY_ONE_MICROSECOND*1000)
 63 #define DELAY_ONE_SECOND (DELAY_ONE_MILLSECOND * 1000)
 64     intervel.QuadPart = (5 * 1000 * DELAY_ONE_MILLSECOND);
 65     KeDelayExecutionThread(KernelMode , FALSE , &intervel);
 66 
 67     //刪除設(shè)備
 68     for (i = 0 ; i < MAX_COM_NUM ; i ++)
 69     {
 70         if(fltDevObj[i] != NULL)
 71             IoDetachDevice(fltDevObj[i]);
 72     }
 73 }
 74 
 75 
 76 /***************************************************************************
 77 *函數(shù)名稱: HelloDDKDispatchRoutine
 78 *功能描述: 默認(rèn)IRP處理例程
 79 *參數(shù)列表: pDeviceObject : I/O管理器傳遞進(jìn)來(lái)的設(shè)備對(duì)象
 80 *             Irp : I/O請(qǐng)求包
 81 *返  回  值: 返回IRP的處理結(jié)果
 82 **************************************************************************/
 83 #pragma  PAGEDCODE
 84 NTSTATUS HelloDDKDispatchRoutine(IN PDEVICE_OBJECT pDeviceObject , IN PIRP Irp)
 85 {
 86     //KdPrint(("Enter HelloDDKDispatchRoutine!\n"));
 87     NTSTATUS status = STATUS_SUCCESS;
 88     PIO_STACK_LOCATION Irpsp = IoGetCurrentIrpStackLocation(Irp);
 89     ULONG i = 0 , j = 0;
 90     for (i = 0 ; i < MAX_COM_NUM ; i++)
 91     {
 92         if (fltDevObj[i] == pDeviceObject)
 93         {
 94             //電源操作 直接放過(guò)
 95             if (Irpsp->MajorFunction  == IRP_MJ_POWER)
 96             {
 97                 PoStartNextPowerIrp(Irp);
 98                 IoSkipCurrentIrpStackLocation(Irp);
 99                 return PoCallDriver(realDevObj[i] , Irp);    //調(diào)用真實(shí)設(shè)備
100             }
101             //過(guò)濾寫請(qǐng)求
102             if (Irpsp->MajorFunction == IRP_MJ_WRITE)
103             {
104                 ULONG uLen = Irpsp->Parameters.Write.Length;    //獲取寫入的長(zhǎng)度
105                 PUCHAR pBuf = NULL;
106                 if (Irp->MdlAddress != NULL)
107                     pBuf = (PUCHAR)MmGetSystemAddressForMdlSafe (Irp->MdlAddress , NormalPagePriority);
108                 else
109                     pBuf = (PUCHAR)Irp->UserBuffer;
110                 if(pBuf == NULL)
111                     pBuf = (PUCHAR)Irp->AssociatedIrp.SystemBuffer;
112 
113                 for (j = 0 ; j < uLen ; j++)
114                     KdPrint(("comcap : SendData : %2x\r\n" , pBuf[j]));                
115             }
116 
117         }
118     }
119     //找不到這個(gè)設(shè)備
120     Irp->IoStatus.Status = status;
121     Irp->IoStatus.Information = 0;
122     IoCompleteRequest(Irp , IO_NO_INCREMENT);
123     return STATUS_SUCCESS;
124 }
125 
126 /***************************************************************************
127 *函數(shù)名稱: AttachAllComs
128 *功能描述: 綁定所有串口設(shè)備
129 *參數(shù)列表: pDriverObject : I/O管理器中傳遞進(jìn)來(lái)的驅(qū)動(dòng)對(duì)象
130 *返  回  值: 無(wú)
131 **************************************************************************/
132 #pragma PAGEDCODE
133 VOID AttachAllComs(PDRIVER_OBJECT Driver)
134 {
135     ULONG i;
136     PDEVICE_OBJECT pComDev;
137     NTSTATUS status;
138     for (i = 0 ; i < MAX_COM_NUM ; i++)
139     {
140         pComDev = OpenCom(i , &status);
141         if (pComDev == NULL)
142             continue;
143         AttachDevice(Driver , pComDev , &fltDevObj[i] , &realDevObj[i]);
144     }
145 }
146 
147 /***************************************************************************
148 *函數(shù)名稱: OpenCom
149 *功能描述: 綁定所有串口設(shè)備
150 *參數(shù)列表: id : 需要綁定的COM號(hào)
151 *             status : 返回函數(shù)的執(zhí)行狀態(tài)
152 *返  回  值: 返回打開的COM口的設(shè)備對(duì)象
153 **************************************************************************/
154 #pragma  PAGEDCODE
155 PDEVICE_OBJECT OpenCom(ULONG id , NTSTATUS * status)
156 {
157     UNICODE_STRING ustrDevName ;
158     WCHAR wName[32];
159     PFILE_OBJECT pFileObj;
160     PDEVICE_OBJECT pDevObj;
161     memset(wName , 0 , sizeof(WCHAR)*32);
162     RtlStringCchPrintfW(wName , 32 , L"\\Device\\Serial%d" , id);
163     RtlInitUnicodeString(&ustrDevName , wName);
164 
165     //打開設(shè)備
166     *status = IoGetDeviceObjectPointer(&ustrDevName , FILE_ALL_ACCESS ,&pFileObj , &pDevObj);
167     if (*status == STATUS_SUCCESS)
168         ObDereferenceObject(pFileObj);        //解除文件對(duì)象
169 
170     return pDevObj;
171 }
172 
173 /***************************************************************************
174 *函數(shù)名稱: AttachDevice
175 *功能描述: 生成虛擬設(shè)備綁定COM口
176 *參數(shù)列表: pDriver : I/O管理器中傳遞進(jìn)來(lái)的驅(qū)動(dòng)對(duì)象
177 *             pOldDeviceObj : 真實(shí)設(shè)備的設(shè)備對(duì)象
178 *             pNewDeviceObj : 創(chuàng)建的虛擬設(shè)備的設(shè)備對(duì)象
179 *             pNext : 指向下一個(gè)設(shè)備
180 *返  回  值: 返回創(chuàng)建設(shè)備對(duì)象的執(zhí)行結(jié)果
181 **************************************************************************/
182 #pragma  PAGEDCODE
183 NTSTATUS AttachDevice(        PDRIVER_OBJECT pDriver , 
184                 PDEVICE_OBJECT pOldDeviceObj , 
185                 PDEVICE_OBJECT * pNewDeviceObj , 
186                 PDEVICE_OBJECT * pNext)
187 {
188     NTSTATUS status;
189     PDEVICE_OBJECT pTopDev = NULL;
190 
191     //生成設(shè)備
192     status = IoCreateDevice(    pDriver , 
193         0 , 
194         NULL , 
195         pOldDeviceObj->DeviceType , 
196         0 , 
197         FALSE ,
198         pNewDeviceObj    );
199     if (status != STATUS_SUCCESS)
200         return status;
201 
202     //拷貝重要標(biāo)志
203     if(pOldDeviceObj->Flags & DO_BUFFERED_IO)
204         (*pNewDeviceObj)->Flags |= DO_BUFFERED_IO;
205     if(pOldDeviceObj->Flags & DO_DIRECT_IO)
206         (*pNewDeviceObj)->Flags |= DO_DIRECT_IO;
207     if(pOldDeviceObj->Characteristics & FILE_DEVICE_SECURE_OPEN)
208         (*pNewDeviceObj)->Characteristics |= FILE_DEVICE_SECURE_OPEN;
209     (*pNewDeviceObj)->Flags |= DO_POWER_PAGABLE;
210 
211     pTopDev = IoAttachDeviceToDeviceStack(*pNewDeviceObj , pOldDeviceObj);
212     if (pTopDev == NULL)
213     {
214         //綁定失敗
215         IoDeleteDevice(*pNewDeviceObj);
216         *pNewDeviceObj = NULL;
217         return STATUS_UNSUCCESSFUL;
218     }
219     *pNext = pTopDev;
220     //啟動(dòng)設(shè)備
221     (*pNewDeviceObj)->Flags = (*pNewDeviceObj)->Flags & ~DO_DEVICE_INITIALIZING;
222     return STATUS_SUCCESS;
223 }
224 
225 /***************************************************************************
226 *函數(shù)名稱: CreateDevice
227 *功能描述: 創(chuàng)建設(shè)備對(duì)象
228 *參數(shù)列表: pDriverObject : I/O管理器中傳遞進(jìn)來(lái)的驅(qū)動(dòng)對(duì)象
229 *返  回  值: 返回創(chuàng)建設(shè)備對(duì)象的執(zhí)行結(jié)果
230 **************************************************************************/
231 #pragma INITCODE
232 NTSTATUS CreateDevice(IN PDRIVER_OBJECT pDriverObject)
233 {
234     NTSTATUS status;
235     PDEVICE_OBJECT pDeviceObject;
236     PDEVICE_EXTENSION pDeviceExtension;
237 
238     //設(shè)備名稱
239     UNICODE_STRING ustrDeviceName;
240     RtlInitUnicodeString(&ustrDeviceName , L"\\Device\\MyDDKDevice");
241 
242     //創(chuàng)建設(shè)備
243     status = IoCreateDevice(pDriverObject , 
244         sizeof(DEVICE_EXTENSION),
245         &ustrDeviceName , 
246         FILE_DEVICE_UNKNOWN , 
247         0,
248         TRUE,
249         &pDeviceObject/*注意此處為OUT PDEVICE_OBJECT  *DeviceObject*/);    
250     if (!NT_SUCCESS(status))
251         return status;
252 
253     pDeviceObject->Flags |= DO_BUFFERED_IO;
254     pDeviceExtension = (PDEVICE_EXTENSION)pDeviceObject->DeviceExtension;    //填充DeviceObject的DeviceExtension字段的內(nèi)容 便于以后使用
255     pDeviceExtension->pDevice = pDeviceObject;
256     pDeviceExtension->ustrDeviceName = ustrDeviceName;
257 
258     //創(chuàng)建符號(hào)鏈接
259     UNICODE_STRING ustrSysLinkName;
260     RtlInitUnicodeString(&ustrSysLinkName , L"\\??\\MyDDK");
261     pDeviceExtension->ustrSysLinkName = ustrSysLinkName;
262     status = IoCreateSymbolicLink(&ustrSysLinkName,&ustrDeviceName);
263     if (!NT_SUCCESS(status))
264     {
265         IoDeleteDevice(pDeviceObject);
266         return status;
267     }
268     return STATUS_SUCCESS;
269 }
270 

效率方面  接下來(lái)再考慮如何提高
還是那句話  Make it right before you make it faster!

posted on 2009-08-28 16:20 李佳 閱讀(1543) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 驅(qū)動(dòng)開發(fā)
<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用鏈接

留言簿

隨筆分類

隨筆檔案

文章檔案

相冊(cè)

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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| 欧美亚洲视频一区二区| 欧美日韩视频一区二区| 影音欧美亚洲| 蜜臀av国产精品久久久久| 久久久亚洲国产天美传媒修理工| 欧美日韩国产综合在线| 亚洲高清免费在线| 亚洲精品美女91| 欧美日本在线视频| 午夜视频在线观看一区二区三区 | 伊人精品成人久久综合软件| 影院欧美亚洲| 亚洲精品影视| 国内精品久久久久影院薰衣草| 久久精品视频在线看| 欧美一区二区福利在线| 伊人狠狠色j香婷婷综合| 亚洲电影天堂av| 国产精品高潮呻吟久久av无限| 亚洲男人的天堂在线aⅴ视频| 亚洲午夜黄色| 夜夜嗨av一区二区三区网页| 最新日韩在线| 久久国产主播精品| 亚洲一区二区网站| 免费不卡在线观看| 免费成人av| 伊人蜜桃色噜噜激情综合| 亚洲天堂av在线免费观看| 狠狠色综合色区| 久久久久久网站| 欧美国产日本高清在线| 国产日韩欧美在线观看| 亚洲人成网站色ww在线| 在线日韩日本国产亚洲| 亚洲系列中文字幕| 夜久久久久久| 国产区亚洲区欧美区| 亚洲一区二区三| 麻豆成人av| 久久深夜福利| 亚洲黄色在线观看| 欧美a级在线| 亚洲视频在线看| 欧美一级专区免费大片| 欧美日韩国产精品专区| 农夫在线精品视频免费观看| 欧美日韩不卡合集视频| 亚洲国产精品999| 亚洲激情二区| 欧美精品一区二区三区视频| 久久久综合香蕉尹人综合网| 欧美精品一区二区久久婷婷| 黄色成人av网站| 欧美日本一区| 久久久噜噜噜久噜久久| 99精品国产高清一区二区| 蜜臀99久久精品久久久久久软件 | 亚洲一区二区三区午夜| 欧美日韩另类在线| 亚洲精品一级| 久久se精品一区二区| 国产婷婷成人久久av免费高清| 91久久午夜| 一区二区三区久久精品| 亚洲欧美影院| 久久久综合免费视频| 伊人精品成人久久综合软件| 国内外成人免费激情在线视频| 午夜激情亚洲| 亚洲激情小视频| 久久久久国产精品午夜一区| 国产欧美一区二区白浆黑人| 午夜精彩国产免费不卡不顿大片| 亚洲欧美日韩精品一区二区| 久久成人一区二区| 亚洲人成在线免费观看| 欧美伊人久久| 亚洲精品中文字幕女同| 嫩模写真一区二区三区三州| 国产婷婷97碰碰久久人人蜜臀| 久久国产一区二区三区| 亚洲大胆av| 久久一区二区精品| 亚洲欧美日韩精品久久久| 激情久久一区| 国产在线不卡视频| 在线观看日韩av电影| 国产精品爱啪在线线免费观看| 欧美一区二区三区视频| 久久国产精品网站| 亚洲福利免费| 艳妇臀荡乳欲伦亚洲一区| 另类欧美日韩国产在线| 亚洲视频每日更新| 99视频精品免费观看| 国产精品人人做人人爽| 亚洲视频欧美视频| 亚洲国产女人aaa毛片在线| 欧美激情视频一区二区三区免费| 日韩性生活视频| 一本一本a久久| 一本综合久久| 欧美亚洲免费高清在线观看| 亚洲久久一区| 国产精品成人免费| 亚洲国产成人av在线| 亚洲精品国产精品国自产观看| 国产丝袜一区二区三区| 国产精品一区毛片| 一区二区亚洲欧洲国产日韩| 国产亚洲欧洲997久久综合| 欧美精品福利视频| 欧美成人久久| 国产乱码精品一区二区三区五月婷| 国产精品入口麻豆原神| 国产午夜精品一区理论片飘花 | 日韩性生活视频| 久久蜜桃精品| 国产欧美69| 亚洲午夜精品一区二区| 久久久久久亚洲精品中文字幕 | 蜜臀久久99精品久久久久久9| 国产又爽又黄的激情精品视频| 欧美在线视频网站| 欧美日韩一卡| 91久久精品国产91久久性色tv| 国产精品99久久久久久人| 亚洲一区在线免费| 亚洲欧洲综合| 久久精品国产一区二区三区| 亚洲激情在线观看视频免费| 99精品99| 一本色道久久综合亚洲二区三区| 久久精品九九| 亚洲欧美日韩成人| 国产精品乱子久久久久| 一区二区免费在线播放| 久久综合激情| 国产欧美二区| 欧美国产免费| 欧美日韩专区| 亚洲欧美日韩在线不卡| 亚洲精品一区二区三区樱花 | 亚洲欧美日本国产有色| 欧美成年人在线观看| 1000部精品久久久久久久久| 悠悠资源网久久精品| 欧美日韩成人在线| 亚洲一区二区三区影院| 亚洲黄色性网站| 国产精品尤物| 亚洲国产精品t66y| 国产精品入口| 久久精品99国产精品酒店日本| 久久精品视频在线免费观看| 国产精品自在欧美一区| 性高湖久久久久久久久| 久久久久亚洲综合| 亚洲欧美日韩中文视频| 亚洲欧美日韩在线观看a三区| 国产在线视频欧美一区二区三区| 老牛嫩草一区二区三区日本| 亚洲综合导航| 中文在线资源观看网站视频免费不卡| 性色av一区二区三区红粉影视| 亚洲国产va精品久久久不卡综合| 亚洲国产精品电影在线观看| 欧美高清视频免费观看| 亚洲第一主播视频| 99国产精品久久久| 精品动漫一区| 亚洲欧美日韩一区在线观看| 国内精品美女在线观看| 亚洲成人自拍视频| 国产美女扒开尿口久久久| 亚洲二区视频| 羞羞视频在线观看欧美| 9久re热视频在线精品| 亚洲黄色成人久久久| 久久超碰97人人做人人爱| 欧美在线视频一区| 91久久夜色精品国产九色| 亚洲电影免费在线 | 国产精品嫩草影院av蜜臀| 欧美1区2区视频| 国产亚洲精品aa午夜观看| 久久精彩免费视频| 久久九九全国免费精品观看| 欧美午夜电影在线| 亚洲欧美日本精品| 久久精品人人爽| 99精品欧美一区| 国产综合视频| 欧美三级视频| 欧美激情精品久久久久久大尺度| 亚洲免费小视频|