阅读:1708回复:18
难题!
我想在passthru中写这么一个函数,
//接收UDP数据,实现IP层的封包和发送功能 VOID UDP_SEND(UDP_HEADER *pUdpHeader)//模拟UDP层向IP层发送数据接口函数 { //将UDP数据报加IP报头和Ether帧头 //。。。 //从而得到 myPacket以太包 //下面就是向下一层发送数据 其间问题: 想调用NdisSend(&Status,pAdapt->BindingHandle,myPacket); 是否可行? 1。可行,那么pAdapt->BindingHandle的问题怎么解决? 2。不可行,那么有其他的方法么? 请教各位! } |
|
|
沙发#
发布于:2003-05-15 10:42
可以。
你如何接受到UDP数据呢? |
|
|
板凳#
发布于:2003-05-15 10:55
我的思路是:应用程序调用UDP_SEND_DATA(char*buffer)->UDP层ADD_UDPHEADR(char*buffer)->IP层UDP_SEND(UDP_HEADER *pUdpHeader)->NdisSend(...),这些函数都是由自己编写的,(似乎很复杂,不晓得可行么)
不知有没有其他的更好的方法,刚学,一头雾水,mikeluo大侠,请帮忙指点一下 [编辑 - 5/15/03 by wangsj47] |
|
|
地板#
发布于:2003-05-15 11:03
这样是可以的,不过有一个应用层和驱动层通信的问题。
|
|
|
地下室#
发布于:2003-05-15 11:09
恩,这个问题我不会,请问该怎么做?
|
|
|
5楼#
发布于:2003-05-15 11:25
看一下wdm驱动的书,一般的都会讲。用irp。
驱动程序之间可以使用一个lib。这个论坛里面有讨论的帖子,你可以查一下 |
|
|
6楼#
发布于:2003-05-15 12:14
恩,就去查,
对了,那个NdisSend函数中需要pAdapt->BindingHandle,这个参数怎么解决啊? 好象没了它NdisSend函数就不能用了 |
|
|
7楼#
发布于:2003-05-15 13:57
passthru里面有吖,padapter结构里面保存了的
|
|
|
8楼#
发布于:2003-05-15 16:41
你的意思说叫我这样:
UDP_SEND(IN NDIS_HANDLE ProtocolBindingContext, UDP_HEADER *pUdpHeader) { PADAPT pAdapt = (PADAPT)MiniportAdapterContext; //... } 这样可否? |
|
|
9楼#
发布于:2003-05-15 17:07
你哪里来的ProtocolBindingContext???
好好看一下passthru的例子,那里面已经保存过了,直接用就行了 |
|
|
10楼#
发布于:2003-05-15 17:32
哦!大意,错了,错了,mikeluo大哥教训的是
我想说的应该是 UDP_SEND(IN NDIS_HANDLE MiniportAdapterContext,, UDP_HEADER *pUdpHeader) { PADAPT pAdapt = (PADAPT)MiniportAdapterContext; //... } 这样可否? , |
|
|
11楼#
发布于:2003-05-15 17:43
你在UDP的驱动里面如何有的MiniportAdapterContext???一样没有的吖。
|
|
|
12楼#
发布于:2003-05-15 17:47
难住了,一头雾水,NdisSend(...)该怎么用呢?
请指点指点! |
|
|
13楼#
发布于:2003-05-15 17:58
mpsend是被ndissend调用的,他当然知道MiniportAdapterContext了。
你的函数不需要知道这些吖,padapter结构里面不是保存了那些相关的变量了么?你直接用就可以了吖。 |
|
|
14楼#
发布于:2003-05-15 18:08
那NdisSend(...)中的三个参数怎么写啊
(不好意思,太笨,还是不太明白,能帮我写出里边的参数让我看看么?) (不管怎样,先谢谢你了,给20分先,我再加了10分!麻烦再帮我指点指点) [编辑 - 5/15/03 by wangsj47] |
|
|
15楼#
发布于:2003-05-15 21:04
passthru的例子里面不是就有么?
NdisSend(&Status, pAdapt->BindingHandle, MyPacket); |
|
|
16楼#
发布于:2003-05-15 21:13
按这样来的话,是不是应该把
VOID UDP_SEND(UDP_HEADER *pUdpHeader) { //。。。 } 函数加在MPSend(...)所在的文件中定义了,是吧? 那我若是把它放在另外的一个.c文件中定义呢,该如何做呢? 就这样加进去好象不行吧。 |
|
|
17楼#
发布于:2003-05-15 21:22
你先仔细看看passthru的例子,那里面的padapter保存在一个全局链表里面,所以你在哪里都是可以使用的。
|
|
|
18楼#
发布于:2003-05-15 21:27
恩,好,有你这话,我就有了十足的信心!
马上去看。。。 |
|
|