solar-2008
驱动牛犊
驱动牛犊
  • 注册日期2008-08-31
  • 最后登录2010-05-21
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望305点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2748回复:9

无盘启动的问题

楼主#
更多 发布于:2008-08-31 10:52
最近我在做一个无盘方面的东西。发现一个问题,我前面用pxe加载了ntldr,很多驱动等等。但是发现在加载我的miniport驱动的时候,tdi驱动还没有准备好,发现ip地址还没有和网卡进行绑定,(我是静态ip地址,地址在注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{******}里面已经存在)。然后我就用TdiRegisterPnPHandlers注册了一个AddAddressHandler的通知,发现在我的miniport的driverentry退出以后大概2秒中才得到这个通知。于是我想在driverentry里面用waitforsingleobject一直等待通知,发现系统就死等下去,觉得好奇怪呀。我的驱动加载顺序是ndis.sys,网卡驱动,ipsec.sys,tcpip.sys,tdi.sys,然后是其他的系统miniport驱动,然后是我的miniport驱动。发现还是不行,我都把start设置为0了。
我在驱动网发现好像很多人在做无盘方面的东西,而且很多人已经实现了。大家能指点一下我吗?感激不尽呀!
我在驱动的driverentry里面等待,好像不行
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-08-31 11:32
以前我做的时候启动顺序是
网卡,ipsec,tcpip然后是自己写的IMD,Miniport
不过我没有使用TDI
仅供参考
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
solar-2008
驱动牛犊
驱动牛犊
  • 注册日期2008-08-31
  • 最后登录2010-05-21
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望305点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-09-01 09:01
谢谢大侠的指点,是不是不能用tdi呀,我现在已经使用了tdi了,不知道是不是要放弃tdi。

引用第1楼AllenZh于2008-08-31 11:32发表的  :
以前我做的时候启动顺序是
网卡,ipsec,tcpip然后是自己写的IMD,Miniport
不过我没有使用TDI
仅供参考
mlkflkf
驱动牛犊
驱动牛犊
  • 注册日期2006-06-21
  • 最后登录2019-08-08
  • 粉丝1
  • 关注0
  • 积分13分
  • 威望93点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2008-09-01 09:42
如果SOCKET 无效先等待网络初始化
然后线程等待直到事件发生
solar-2008
驱动牛犊
驱动牛犊
  • 注册日期2008-08-31
  • 最后登录2010-05-21
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望305点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-09-01 10:31
我感觉好像我在另外线程里面等待,影响了整个系统进行,好像系统初始化都是串行进行。根本不起作用。

引用第3楼mlkflkf于2008-09-01 09:42发表的  :
如果SOCKET 无效先等待网络初始化
然后线程等待直到事件发生
mlkflkf
驱动牛犊
驱动牛犊
  • 注册日期2006-06-21
  • 最后登录2019-08-08
  • 粉丝1
  • 关注0
  • 积分13分
  • 威望93点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2008-09-01 11:57
启动过程:
1,初始化:端口,服务器ip等信息+HookScsiport
2,建立工作线程(你所说的在这里完成:如果SOCKET 无效先等待网络初始化,然后线程等待直到事件发生。)
3,建立驱动器符号
4,TdiRegisterPnPHandlers
5,SCSI Mini 初始

上面已经详细了吧!
solar-2008
驱动牛犊
驱动牛犊
  • 注册日期2008-08-31
  • 最后登录2010-05-21
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望305点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-09-01 13:12
老大,我按照你的顺序和方法修改了我的代码。但是还是不行。我在那个工作线程里面等待(我设置了20秒超时,如果不设置会死等),我发现每次都是等待20秒后超时,然后超时退出以后,大概2秒后发现增加IP地址的事件发生了。我一直很奇怪,我是在另外一个线程里面等待,为什么会这样。难道是因为调度程序还没有发挥作用?这个时候的irql是passive的呀。谢谢老大,但是还是不行!

引用第5楼mlkflkf于2008-09-01 11:57发表的  :
启动过程:
1,初始化:端口,服务器ip等信息+HookScsiport
2,建立工作线程(你所说的在这里完成:如果SOCKET 无效先等待网络初始化,然后线程等待直到事件发生。)
3,建立驱动器符号
4,TdiRegisterPnPHandlers
.......
solar-2008
驱动牛犊
驱动牛犊
  • 注册日期2008-08-31
  • 最后登录2010-05-21
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望305点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-09-01 19:53
我发现我注册TdiRegisterPnPHandlers后,得到的消息顺序是这样的:
TDI_PNP_OP_PROVIDERREADY(TdiPnPBindingChange)
TDI_PNP_OP_NETREADY(TdiPnPBindingChange)
TDI_ADDRESS_TYPE_IP(AddNetAddress)
TDI_ADDRESS_TYPE_NETBIOS(AddNetAddress)
大概在我注册后2秒钟得到TDI_ADDRESS_TYPE_IP和TDI_ADDRESS_TYPE_NETBIOS消息,前面的TDI_PNP_OP_PROVIDERREADY和TDI_PNP_OP_NETREADY倒是立即得到。
mlkflkf
驱动牛犊
驱动牛犊
  • 注册日期2006-06-21
  • 最后登录2019-08-08
  • 粉丝1
  • 关注0
  • 积分13分
  • 威望93点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2009-06-08 10:53
有TDI_ADDRESS_TYPE_IP时在AddNetAddress中建立与服务器的网络连接哈。。。
wjlinzhu
驱动牛犊
驱动牛犊
  • 注册日期2003-08-04
  • 最后登录2013-03-12
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望30点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2011-06-29 19:28
NdisOpenAdapter
wj
游客

返回顶部