使用NDIS HOOK作防火墙和VPN的大侠请进!!
HOOK上ProtocolReceive后,我要对接受的数据进行解密。但是,当PacketSize > LookAheadBufferSize时,要调用NdisTransferData 来去剩余的数据,如下,
VOID NdisTransferData(
OUT PNDIS_STATUS Status,
IN NDIS_HANDLE NdisBindingHandle,
IN NDIS_HANDLE MacReceiveContext,
IN UINT ByteOffset,
IN UINT BytesToTransfer,
IN OUT PNDIS_PACKET Packet,
OUT PUINT BytesTransferred
);
但是我不知道第二个参数该如何确定,导致我已经死机N次了。
高手指点,我可以再加分。救我吧...................
waiting....
问题点数:0、回复次数:11Top
1 楼snsins(初雪草)回复于 2002-12-01 17:24:58 得分 0
NdisBindingHandl是一指针,
指向NDIS_OPEN_BLOCK表
通过NdisOpenAdapter
返回的
VOID
NdisOpenAdapter(
OUT PNDIS_STATUS Status,
OUT PNDIS_STATUS OpenErrorStatus,
OUT PNDIS_HANDLE NdisBindingHandle,//就是这个
OUT PUINT SelectedMediumIndex,
IN PNDIS_MEDIUM MediumArray,
IN UINT MediumArraySize,
IN NDIS_HANDLE NdisProtocolHandle,
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_STRING AdapterName,
IN UINT OpenOptions,
IN PSTRING AddressingInformation OPTIONAL,
);
NdisOpenAdapter sets up
Top
2 楼leepyzh(leepyzh)回复于 2002-12-01 21:58:06 得分 0
上次网上有人讲是NdisProtocolHandle(第七个参数)。
谢谢: snsins(不再信仰,不再坚持),我试试!
另外,NdisBindingHandle,NdisProtocolHandle,ProtocolBindingContext这三个参数区别是什么?
Top
3 楼snsins(初雪草)回复于 2002-12-01 22:43:20 得分 0
NdisRegisterProtocol(
OUT PNDIS_STATUS Status,
OUT PNDIS_PROTOCOL_BLOCK NdisProtocolHandle, //看这里,这下知道NdisProtocolHandle是什么了吧?
IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics,
IN UINT CharacteristicsLength
);
struct _NDIS_OPEN_BLOCK
{
PNDIS_MAC_BLOCK MacHandle; // pointer to our MAC
NDIS_HANDLE MacBindingHandle; // context when calling MacXX funcs
PNDIS_ADAPTER_BLOCK AdapterHandle; // pointer to our adapter
PNDIS_PROTOCOL_BLOCK ProtocolHandle; // pointer to our protocol
NDIS_HANDLE ProtocolBindingContext;// 这个东西
..................
Top
4 楼snsins(初雪草)回复于 2002-12-01 22:59:11 得分 0
NDIS这东西
一个字儿:难Top
5 楼snsins(初雪草)回复于 2002-12-01 22:59:28 得分 0
看看DDK附带的SAMPLE里的PACKETTop
6 楼leepyzh(leepyzh)回复于 2002-12-02 15:02:18 得分 0
snsins(不再信仰,不再坚持):
谢谢提示!我用NdisBindingHandle试了一下,还是死机,我晕~~~
其实我的要求很简单,就是在HOOK上的ProtocolReceive里面用NdisTransferData取得剩下的数据,就OK!没想到搞了一两个星期还没有成功!偏偏我必须过这一关!
分特!Top
7 楼zhaolaoxin()回复于 2002-12-02 15:04:30 得分 0
upTop
8 楼snsins(初雪草)回复于 2002-12-02 15:20:53 得分 0
啊啊啊
你有几块网卡?
Top
9 楼leepyzh(leepyzh)回复于 2002-12-02 22:28:51 得分 0
我就一块网卡呀!
不过曾经装了两块,后来拆掉了,不会有影响吧?
不过,我用SoftIce发现,启动时,NdisOpenAdapter函数被调用了8次,难道跟这个有关系?
就是说如果有两块网卡的话,我必须找到对应关系?
网上高手说,
“你既然hook了NdisOpenAdapter,那么你唯一的办法就是做个对应表把ProtocolBindingContext和NDIS_OPEN_BLOCK对应起来”
不知是不是这个意思?
我很郁闷,有时怀疑是不是我的要求根本是不可能实现的??
谢谢!!
在下有礼了!!Top
10 楼snsins(初雪草)回复于 2002-12-02 23:49:40 得分 0
NDIS HOOK我也没做过
我一直在学做标准的NDIS驱动
具体情况也不清楚
NdisOpenAdapter被调用8次不奇怪,因为NdisRegisterProtocol每注册一个协议,都会调用BindAdapterHandler,BindAdapterHandler会导致NdisOpenAdapter被调用
Top
11 楼snsins(初雪草)回复于 2002-12-02 23:56:49 得分 0
哦
记得斑竹wuxuan说过他有过NDIS方面的具体项目经验
你可以请教一下他
祝你好运Top




