阅读:2843回复:9
无盘启动的问题
最近我在做一个无盘方面的东西。发现一个问题,我前面用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里面等待,好像不行 |
|
沙发#
发布于:2008-08-31 11:32
以前我做的时候启动顺序是
网卡,ipsec,tcpip然后是自己写的IMD,Miniport 不过我没有使用TDI 仅供参考 |
|
|
板凳#
发布于:2008-09-01 09:01
谢谢大侠的指点,是不是不能用tdi呀,我现在已经使用了tdi了,不知道是不是要放弃tdi。
引用第1楼AllenZh于2008-08-31 11:32发表的 : |
|
地板#
发布于:2008-09-01 09:42
如果SOCKET 无效先等待网络初始化
然后线程等待直到事件发生 |
|
地下室#
发布于:2008-09-01 10:31
我感觉好像我在另外线程里面等待,影响了整个系统进行,好像系统初始化都是串行进行。根本不起作用。
引用第3楼mlkflkf于2008-09-01 09:42发表的 : |
|
5楼#
发布于:2008-09-01 11:57
启动过程:
1,初始化:端口,服务器ip等信息+HookScsiport 2,建立工作线程(你所说的在这里完成:如果SOCKET 无效先等待网络初始化,然后线程等待直到事件发生。) 3,建立驱动器符号 4,TdiRegisterPnPHandlers 5,SCSI Mini 初始 上面已经详细了吧! |
|
6楼#
发布于:2008-09-01 13:12
老大,我按照你的顺序和方法修改了我的代码。但是还是不行。我在那个工作线程里面等待(我设置了20秒超时,如果不设置会死等),我发现每次都是等待20秒后超时,然后超时退出以后,大概2秒后发现增加IP地址的事件发生了。我一直很奇怪,我是在另外一个线程里面等待,为什么会这样。难道是因为调度程序还没有发挥作用?这个时候的irql是passive的呀。谢谢老大,但是还是不行!
引用第5楼mlkflkf于2008-09-01 11:57发表的 : |
|
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倒是立即得到。 |
|
8楼#
发布于:2009-06-08 10:53
有TDI_ADDRESS_TYPE_IP时在AddNetAddress中建立与服务器的网络连接哈。。。
|
|
9楼#
发布于:2011-06-29 19:28
NdisOpenAdapter
|
|
|