helebest
驱动牛犊
驱动牛犊
  • 注册日期2005-06-27
  • 最后登录2006-05-30
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望9点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1892回复:9

Windows网络驱动学习笔记1

楼主#
更多 发布于:2005-07-05 12:53
本人刚接触网络驱动开发不久,在版主等高手的指点下懂了一些皮毛,首先感谢!
下面我对最近的学习做一个小结,比较零散,也不全面,希望得到高手的指点,同时也希望和跟我一样的新手多多交流:)
首先,我阅读了关于WDM的一些介绍书籍,了解Windows驱动的基本概念,发现不同用途的驱动实现各有不同,但是还是有相同的地方:DriverEntry函数类似于C程序里的main函数,是Windows驱动的入口点,在里面做一些初始化工作,比如给各种IRP的Major Function指定派遣例程,调用IoCreateDevice函数等;其次,Windows驱动的实际是处理I/O管理器传递下来的IRP包,而每个重要的IRP包有相应的派遣例程进行处理,比如IRP_MJ_CREATE,IRP_MJ_DEVICE_CONTROL,IRP_MJ_CLOSE等等。

然后,选择和熟悉开发环境,由于我用的Windows2000系统(sp4),所以用了Windows2003 sp1的DDK。需要指出的是,我没有采用Driver Studio的东西,这也是我在本网站上看到前辈们的总结而决定的。代码察看和编辑采用的是Source Insight3.5,可视化效果很好。

最后,在网站上搜索相关的范例源代码。因为我要做一个实现类似于端口复用的功能,就是在其他应用程序(比如IIS)处理数据包之前进行截获,如果是我复用的数据包,就转到自己的处理程序上,如果不是则放过。实际上,这就是一个包过滤驱动,要实现它在内核模式里可以在NDIS中间层和TDI上考虑,最终我还是决定在TDI上实现,因此在版主的帮助下,得到了PCAUSA这方面的源码,感觉PassThru这个例子适合我的要求,目前也就是在阅读它的代码。

在这个过程中我也遇到不少疑问:
1. 如何编写SOURCES文件(感觉DDK上讲的比叫晦涩,呵呵)?在一般的网络驱动开发中,是在范例的基础上进行改动还是完全自己来编写的SOURCES文件?
2. 调试驱动用那种软件?我知道WinDbg和DebugView可以输出调试信息,但是具体如何使用两者,以及在何种情况下使用更好等还不太清楚。
3. Softice是DriverStudio里集成的,但是网上说Softice很好用,破解呀什么都可以用它,但是它可以脱离DS分开使用吗?
4. TDISAMP里的PassThru好像没有附带测试程序,如何对它进行测试呢?另外,驱动是不是都需要其他程序调用才起作用,重启Windows以后可不可以让它自行启动?

最新喜欢:

LeopardLeopar...
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-07-05 13:50
1.在范例的基础上改好了。
2。一般用softice调试,DebugView只是看DbgPrint的输出的信息。windbg不如softice简单易用
3。softice可以和ds分开使用
4。tdi的passthru,需要在注册表中建立相关的表项,最简单的通过一个reg文件导入一下就可以了
对于这个例子,系统启动后,是会自动加载的。没有测试程序,你也可以通过打印出调试信息,来观察。
上层应用程序的目的主要是完成和驱动的通讯,进行一些设置。根据自己的需要来写
helebest
驱动牛犊
驱动牛犊
  • 注册日期2005-06-27
  • 最后登录2006-05-30
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望9点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-07-05 14:03
多谢版主指点.
安装驱动的时候我先将生成的PCATDIH.sys文件放在system32/drivers/目录下,然后用在命令提示符下用regini将PCATDIH.INI写入了注册表中。
如果用softice来调试,怎么打印调试信息呢?
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2005-07-05 14:49
如果仅仅看调试信息,用DbgView,或者DriverMonitor更方便。如果softice已经起来了,ctrl+d进入softice后,在命令行窗口,也能看到调试信息。
idaxsy
驱动大牛
驱动大牛
  • 注册日期2004-12-09
  • 最后登录2006-03-17
  • 粉丝0
  • 关注0
  • 积分386分
  • 威望54点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-07-05 15:14
我在网上也看到有人说windbg不好,不好用,而且老要下载符号文件。
[b]万水千山总是情,回个帖子行不行?[/b]
idaxsy
驱动大牛
驱动大牛
  • 注册日期2004-12-09
  • 最后登录2006-03-17
  • 粉丝0
  • 关注0
  • 积分386分
  • 威望54点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-07-05 15:17
呵呵,我发现有时候softice出不来,把显示器分辩率调低一点,就出来了。
[b]万水千山总是情,回个帖子行不行?[/b]
helebest
驱动牛犊
驱动牛犊
  • 注册日期2005-06-27
  • 最后登录2006-05-30
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望9点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-07-05 15:57
多谢各位的讨论!但是,怎么判断驱动有没有安装成功啊?我将.sys拷贝复制到相应目录并进行了注册,但是重启后用TDISAMP附带的TDIHTEST程序执行CreateFile的时候无法打开驱动,错误码2,"系统找不到指定的文件",同时在DbgView和Softice也看不到调试信息。
helebest
驱动牛犊
驱动牛犊
  • 注册日期2005-06-27
  • 最后登录2006-05-30
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望9点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-07-05 16:11
感觉是写入注册表有问题:
\registry\machine\system\currentcontrolset\services\PCATDIH
    Type = REG_DWORD 0x00000001
    Start = REG_DWORD 0x00000003
    Group = Extended base
    ErrorControl = REG_DWORD 0x00000001
根其他驱动的注册表信息比起来,少了很多,比如没有ImagePath等,但是加上ImagePath还是不行,还需要那些信息阿?
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2005-07-05 16:47
Start = REG_DWORD 0x00000003是手动加载,可以用net start pcatdih来加载
helebest
驱动牛犊
驱动牛犊
  • 注册日期2005-06-27
  • 最后登录2006-05-30
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望9点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-07-05 17:15
嗯,明白了。谢谢版主
游客

返回顶部