flyhobo
驱动小牛
驱动小牛
  • 注册日期2004-03-05
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1731回复:12

怎样在NDIS_WDM中构建自己IRP发送到其他的WDM驱动?

楼主#
更多 发布于:2004-05-09 09:54
我要实现一NDIS_WDM的miniport,在miniport中要把构造自己的IRP把数据发送到其他的WDM驱动,我应该怎样构建IRP?
好好过日子
flyhobo
驱动小牛
驱动小牛
  • 注册日期2004-03-05
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-05-09 14:13
没人帮忙吗?
给点资料看看也行啊!!
好好过日子
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-05-10 09:01
一般讲驱动的书上都有。
flyhobo
驱动小牛
驱动小牛
  • 注册日期2004-03-05
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-05-10 10:17
一般讲驱动的书上都有。

 :D一般讲驱动的书?我所看到的一般讲驱动的书连NDIS都没有讲的啊!DDK上有,但不知道从那看起好啊!
感觉做驱动和以前做应用有太大的差别了 :P
好好过日子
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-05-10 10:23
对于构造请求包,NDIS和一般的驱动都一样。
flyhobo
驱动小牛
驱动小牛
  • 注册日期2004-03-05
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-05-10 10:40
asmsys:顺便问一下这个疑问
在2003DDK的例子NetVMini中(好像我给过你)有这样一个调用:
        //
        // NdisMGetDeviceProperty function enables us to get the:
        // PDO - created by the bus driver to represent our device.
        // FDO - created by NDIS to represent our miniport as a function driver.
        // NextDeviceObject - deviceobject of another driver (filter)
        //                      attached to us at the bottom.
        // In a pure NDIS miniport driver, there is no use for this
        // information, but a NDISWDM driver would need to know this so that it
        // can transfer packets to the lower WDM stack using IRPs.
        //
        NdisMGetDeviceProperty(MiniportAdapterHandle,
                           &Adapter->Pdo,
                           &Adapter->Fdo,
                           &Adapter->NextDeviceObject,
                           NULL,
                           NULL);

但怎么保证我的NDISWDM driver miniport正确安装到了相应的设备栈?我的另一设备为WDM的PCI驱动,二者根本就没有必然的联系吗?
好好过日子
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-05-10 11:57
有几种方法:
1、直接注册为NDIS-WDM的小端口驱动,这样PNP的时候,PCI驱动的上边就
会有系统自动挂接你的小端口驱动, NdisMGetDeviceProperty 得到的就是PCI设备的相关。
可看DDK\\network drivers\\Designed guide\\第12章。
2、 NdisMGetDeviceProperty的最后两个参数,为你返回一串设备让你选,
你选合适的就可以了。
3、调用 IoCallDriver
bingjie
驱动小牛
驱动小牛
  • 注册日期2001-08-15
  • 最后登录2007-11-29
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-05-10 17:03
有几种方法:
1、直接注册为NDIS-WDM的小端口驱动,这样PNP的时候,PCI驱动的上边就
会有系统自动挂接你的小端口驱动, NdisMGetDeviceProperty 得到的就是PCI设备的相关。
可看DDK\\network drivers\\Designed guide\\第12章。
2、 NdisMGetDeviceProperty的最后两个参数,为你返回一串设备让你选,
你选合适的就可以了。
3、调用 IoCallDriver
 

NdisMgetDeviceProperty得到的设备分别是PhysicalDeviceObject、FuncDeviceOject和NextDeviceObject,这几个设备对象是有具体的意义的,并不是都可以调用IoCallDriver的。实际上可以调用的也就是NextDeviceObject,比如可以通过该DeviceObject来操作PCI配置空间。如果要想在一个驱动里发送IRP到其它的WDM驱动,而该驱动又不在同一个设备栈中,则应该先调用IoCreateFile来获得该设备的设备对象,然后通过该设备对象来发送IRP,如发送一个Internal_DEVICE_IO_CONTROL到那个驱动的DispatchIoControl例程。IoCreateFile和应用层的CreateFile的用法很相似的,具体可以看DDK
flyhobo
驱动小牛
驱动小牛
  • 注册日期2004-03-05
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-05-10 17:23
有几种方法:
1、直接注册为NDIS-WDM的小端口驱动,这样PNP的时候,PCI驱动的上边就
会有系统自动挂接你的小端口驱动, NdisMGetDeviceProperty 得到的就是PCI设备的相关。
可看DDK\\network drivers\\Designed guide\\第12章。
2、 NdisMGetDeviceProperty的最后两个参数,为你返回一串设备让你选,
你选合适的就可以了。
3、调用 IoCallDriver
 

1、怎么直接注册为NDIS-WDM的小端口驱动?
2、ddk中有如下一段话
For example, a miniport driver that controls devices on either Universal Serial Bus (USB) or IEEE 1394 (firewire) buses must expose a standard NDIS miniport driver interface at its upper edge and use the class interface for the particular bus at its lower edge. Such a miniport driver communicates with devices that are attached to the bus by sending I/O request packets (IRPs) to the bus.
这里我怎样制定我的NDIS-WDM miniport driver的lower edge为相应的USB or firewire ,我的实际情况为PCI板卡驱动,是否要相应指定lower edge为pci?这里好不明白

A miniport driver with a WDM lower edge―an NDIS-WDM miniport driver―follows the WDM rule that specifies that a WDM header file must be included in the driver\'s source files.
这里the driver\'s source files分别是什么,在ddk里有说明吗?PCI bus的内?
好好过日子
flyhobo
驱动小牛
驱动小牛
  • 注册日期2004-03-05
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-05-10 17:27
NdisMgetDeviceProperty得到的设备分别是PhysicalDeviceObject、FuncDeviceOject和NextDeviceObject,这几个设备对象是有具体的意义的,并不是都可以调用IoCallDriver的。实际上可以调用的也就是NextDeviceObject,比如可以通过该DeviceObject来操作PCI配置空间。如果要想在一个驱动里发送IRP到其它的WDM驱动,而该驱动又不在同一个设备栈中,则应该先调用IoCreateFile来获得该设备的设备对象,然后通过该设备对象来发送IRP,如发送一个Internal_DEVICE_IO_CONTROL到那个驱动的DispatchIoControl例程。IoCreateFile和应用层的CreateFile的用法很相似的,具体可以看DDK
 

这里看的还比较明白,但不知实际处理IRP有多复杂?感觉好难下手?目前在啃ddk的Handling IRPs部分 :mad:晕啊!
有没有简明的资料和例子啊 :P(估计这个很难有啊!)
好好过日子
flyhobo
驱动小牛
驱动小牛
  • 注册日期2004-03-05
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-05-11 14:21
我顶
asmsys 帮帮我把,你所说的我看了DDK还是不明白啊!
我笨?
好好过日子
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-05-11 15:42
惭愧,这东西我没有具体做过,不好多说了,我只能说,如果我是你,我就只能从我说的那几个方面去考虑。具体工作还要你努力呀,多写几个测试程序是比不可少的,毕竟老板给你发工资,让你做研发。
flyhobo
驱动小牛
驱动小牛
  • 注册日期2004-03-05
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-05-11 15:47
惭愧,这东西我没有具体做过,不好多说了,我只能说,如果我是你,我就只能从我说的那几个方面去考虑。具体工作还要你努力呀,多写几个测试程序是比不可少的,毕竟老板给你发工资,让你做研发。

惭愧的是我啊 :D
谢谢asmsys 指点
OK!try,go……
好好过日子
游客

返回顶部