阅读:2427回复:9
NdisRequest()函数使用问题
不知哪位高手用过NdisRequest()函数,我试着在几个地方调用该函数,但都导致死机.
|
|
最新喜欢:![]() |
沙发#
发布于:2004-12-16 16:18
我编了一个程序,想在PtOpenAdapter()中将网卡设为混杂状态,但是每次都蓝屏,代码是这样的:
SetPromiscMode( IN NDIS_HANDLE BindingHandle ) { NDIS_STATUS Status; ULONG Filter; NDIS_REQUEST Request; DbgPrint("Setting Promiscous mode\n"); Filter=NDIS_PACKET_TYPE_PROMISCUOUS; NdisZeroMemory(&Request,sizeof(NDIS_REQUEST)); Request.RequestType=NdisRequestSetInformation; Request.DATA.SET_INFORMATION.Oid = OID_GEN_CURRENT_PACKET_FILTER; Request.DATA.SET_INFORMATION.InformationBuffer=&Filter; Request.DATA.SET_INFORMATION.InformationBufferLength = sizeof(ULONG); NdisRequest(&Status,BindingHandle,&Request); DbgPrint("Setting promiscous mode complete\n"); return Status; } |
|
板凳#
发布于:2004-12-16 18:47
我也现在也在为如何使用NdisRequest()犯愁.不过我想您不该在PtOpen*()中使用它,而应在PtOpencomplete()中用它,因为这时您才能保证BindingHandle是正确的.
|
|
地板#
发布于:2004-12-16 18:56
不好意思,我刚才说错了,是在PtBindAdapter()函数中调用,具体位置是在NdisOpenAdapter()函数调用之后,且Pending状态已经结束
|
|
地下室#
发布于:2004-12-16 21:14
混杂模式只要调用NdisRequest就可以了啊,OID:OID_GEN_CURRENT_PACKET_FILTER, BIT: NDIS_PACKET_TYPE_PROMISCUOUS
调用该函数要确保在OpenAdapterComplete后进行,并且注意在PtRequestComplete函数里要判断是你自己发起的Requester还是其它协议发起的,如果是你自己发起的Request那么不需要再调用NdisMSetInformationComplete了。 |
|
5楼#
发布于:2004-12-16 21:18
我编了一个程序,想在PtOpenAdapter()中将网卡设为混杂状态,但是每次都蓝屏,代码是这样的: 必须要判断NdisRequest的返回值才知道是否执行结束,如果是Pending,那么你的Request是一个局部变量,return后必然蓝屏 |
|
6楼#
发布于:2004-12-16 22:20
以bingjie老兄说,如果request变量是个全局变量的话,那么NdisRequest()就能在OpenAdapterComplete之后正常使用了吗?
|
|
7楼#
发布于:2004-12-17 14:14
我按照bingjie老兄说的做了,系统没有蓝屏,但是却死机了,这是为什么呀?
|
|
8楼#
发布于:2004-12-17 15:32
bingjie老兄快想想办法呀!!!
|
|
9楼#
发布于:2004-12-18 09:49
我用了一个下午的时间,仅仅证明NDISRequest()不能在OpenAdapter()函数之后调用,不管用什么方式调用,系统不是死机就是蓝屏。另外,OpenAdapter()函数之后NdisIMInitializeDeviceInstanceEx()函数调用完成后,再调用MPSetInfomation()设置混杂状态也不行。看来只有从用户态发出IODeviceControl()函数调用,才有可能成功呀
|
|