seant
驱动牛犊
驱动牛犊
  • 注册日期2001-07-05
  • 最后登录2005-05-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1874回复:10

能不能在同一驱动程序中同时提供NDIS接口和WDM接口?

楼主#
更多 发布于:2002-01-03 15:17
一块PCI卡,一方面要模拟成网卡,给NDIS库提供接口(串行化);另一方面又要提供普通的WDM接口,响应一专用控制程序发出的IRP。应该如何编程?能不能在同一个驱动程序中同时提供这两种接口?
HuYuguang
论坛版主
论坛版主
  • 注册日期2001-04-25
  • 最后登录2013-04-29
  • 粉丝3
  • 关注1
  • 积分92分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2002-01-03 19:20
一块PCI卡,一方面要模拟成网卡,给NDIS库提供接口(串行化);另一方面又要提供普通的WDM接口,响应一专用控制程序发出的IRP。应该如何编程?能不能在同一个驱动程序中同时提供这两种接口?


of course.你需要的不过是提供一个deviceobject.
不再回忆从前,我已经生活在幸福当中。
seant
驱动牛犊
驱动牛犊
  • 注册日期2001-07-05
  • 最后登录2005-05-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-01-04 15:27
Thanks a lot!
seant
驱动牛犊
驱动牛犊
  • 注册日期2001-07-05
  • 最后登录2005-05-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-01-07 15:34
[quote]一块PCI卡,一方面要模拟成网卡,给NDIS库提供接口(串行化);另一方面又要提供普通的WDM接口,响应一专用控制程序发出的IRP。应该如何编程?能不能在同一个驱动程序中同时提供这两种接口?


of course.你需要的不过是提供一个deviceobject. [/quote]

版主,这个deviceobject如何提供呢?在普通的WDM驱动中,DriverEntry()里向DriverObject注册了AddDevice例程,随后系统用一个DeviceObject为参数调用这个例程;但在NDIS驱动的DriverEntry()中,调用NdisMInitializeWrapper()时已经使用了DriverObject为参数,那么这个DriverObject还能用来设置AddDevice()例程吗?
能否推荐一些有关的资料?
我很急啊!!!
wcw
wcw
驱动牛犊
驱动牛犊
  • 注册日期2001-08-11
  • 最后登录2003-07-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-01-09 13:34
You may check the NDIS function named \"NdisMRegisterDevice\".

But I have a question that if I use this function and the

NDIS create a device object which the member

\"DEVICE_EXTENSION\" is reserved for NDIS and driver cannot

use it. So I could not pass any context to my dispatch

function?  How could I do?
HuYuguang
论坛版主
论坛版主
  • 注册日期2001-04-25
  • 最后登录2013-04-29
  • 粉丝3
  • 关注1
  • 积分92分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分1分
  • 专家分0分
5楼#
发布于:2002-01-09 14:44
You may check the NDIS function named \"NdisMRegisterDevice\".

But I have a question that if I use this function and the

NDIS create a device object which the member

\"DEVICE_EXTENSION\" is reserved for NDIS and driver cannot

use it. So I could not pass any context to my dispatch

function?  How could I do?


定义一个全局结构:
typedef struct _GLOBALS
{
int a;
char* b;
}GLOALS,*PGLOBAS;
不再回忆从前,我已经生活在幸福当中。
wcw
wcw
驱动牛犊
驱动牛犊
  • 注册日期2001-08-11
  • 最后登录2003-07-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-01-09 15:57
定义一个全局结构:
typedef struct _GLOBALS
{
int a;
char* b;
}GLOALS,*PGLOBAS;


Yes! this is a way. But when more than one devices are

plugged I have to manage those global variables. Any simpler

solution exists?
HuYuguang
论坛版主
论坛版主
  • 注册日期2001-04-25
  • 最后登录2013-04-29
  • 粉丝3
  • 关注1
  • 积分92分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分1分
  • 专家分0分
7楼#
发布于:2002-01-09 22:36
[quote]定义一个全局结构:
typedef struct _GLOBALS
{
int a;
char* b;
}GLOALS,*PGLOBAS;


Yes! this is a way. But when more than one devices are

plugged I have to manage those global variables. Any simpler

solution exists? [/quote]

我想你就只好如下定义globals
typedef struct _GLOBAS
{
DEVICE_OBJECT OBJECT;
int a;
int b;
}GLOBALS;

然后在你每次create device的时候new 一个globals。

虽然我自己常常这么干,但是还有更好的方法,你自己
看看ddk,ddk里面有这方面的详细描述。我由于知识体系
结构已经老化,(这是我的转业理由之2)无法学进新知识,
所以才老是使用老的过时的经验。
不再回忆从前,我已经生活在幸福当中。
freexzh
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2001-12-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-01-10 12:27
在 nic driver 中建立的设备在用户模式下是不可见的。
解决方法,再增加一个WDM driver,这个wdm driver 调用nic driver. :cool:
eepaul
驱动牛犊
驱动牛犊
  • 注册日期2001-12-14
  • 最后登录2002-04-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-01-11 00:47
[quote]定义一个全局结构:
typedef struct _GLOBALS
{
int a;
char* b;
}GLOALS,*PGLOBAS;


Yes! this is a way. But when more than one devices are

plugged I have to manage those global variables. Any simpler

solution exists? [/quote]

我现在做的东西和你惊人的相似.:)
我就用ne2000的例子改的.
ne2000.c中有一个全局两DRIVER_BLOCK Ne2000MiniportBlock

在它的头文件ne2000sw.h中
typedef struct _DRIVER_BLOCK {

    //
    // NDIS wrapper information.
    //
    NDIS_HANDLE NdisMacHandle;          // returned from NdisRegisterMac
    NDIS_HANDLE NdisWrapperHandle;      // returned from NdisInitializeWrapper

    //
    // Adapters registered for this Miniport driver.
    //
    struct _NE2000_ADAPTER * AdapterQueue;

} DRIVER_BLOCK, * PDRIVER_BLOCK;

所有的device的context都在AdapterQueue指向的队列中
HuYuguang
论坛版主
论坛版主
  • 注册日期2001-04-25
  • 最后登录2013-04-29
  • 粉丝3
  • 关注1
  • 积分92分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分1分
  • 专家分0分
10楼#
发布于:2002-01-11 10:11
在 nic driver 中建立的设备在用户模式下是不可见的。
解决方法,再增加一个WDM driver,这个wdm driver 调用nic driver. :cool:


Who said that?
不再回忆从前,我已经生活在幸福当中。
游客

返回顶部