阅读:1874回复:10
能不能在同一驱动程序中同时提供NDIS接口和WDM接口?
一块PCI卡,一方面要模拟成网卡,给NDIS库提供接口(串行化);另一方面又要提供普通的WDM接口,响应一专用控制程序发出的IRP。应该如何编程?能不能在同一个驱动程序中同时提供这两种接口?
|
|
沙发#
发布于:2002-01-03 19:20
一块PCI卡,一方面要模拟成网卡,给NDIS库提供接口(串行化);另一方面又要提供普通的WDM接口,响应一专用控制程序发出的IRP。应该如何编程?能不能在同一个驱动程序中同时提供这两种接口? of course.你需要的不过是提供一个deviceobject. |
|
|
板凳#
发布于:2002-01-04 15:27
Thanks a lot!
|
|
地板#
发布于: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()例程吗? 能否推荐一些有关的资料? 我很急啊!!! |
|
地下室#
发布于: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? |
|
5楼#
发布于:2002-01-09 14:44
You may check the NDIS function named \"NdisMRegisterDevice\". 定义一个全局结构: typedef struct _GLOBALS { int a; char* b; }GLOALS,*PGLOBAS; |
|
|
6楼#
发布于:2002-01-09 15:57
定义一个全局结构: Yes! this is a way. But when more than one devices are plugged I have to manage those global variables. Any simpler solution exists? |
|
7楼#
发布于:2002-01-09 22:36
[quote]定义一个全局结构: 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)无法学进新知识, 所以才老是使用老的过时的经验。 |
|
|
8楼#
发布于:2002-01-10 12:27
在 nic driver 中建立的设备在用户模式下是不可见的。
解决方法,再增加一个WDM driver,这个wdm driver 调用nic driver. :cool: |
|
9楼#
发布于:2002-01-11 00:47
[quote]定义一个全局结构: 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指向的队列中 |
|
10楼#
发布于:2002-01-11 10:11
在 nic driver 中建立的设备在用户模式下是不可见的。 Who said that? |
|
|