eepaul
驱动牛犊
驱动牛犊
  • 注册日期2001-12-14
  • 最后登录2002-04-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1371回复:3

ds中IoDispatch的问题

楼主#
更多 发布于:2002-01-08 15:10
因为ds中的IoDispatch声明为静态函数,所以

里面不能调用非静态成员函数.就不能用SendComplete()等.

如果不把IoDispatch声明为静态,在初始化时
MajorFunctions[IRP_MJ_DEVICE_CONTROL] = IoDispatch;
有不行.

那位大哥有好的解决办法?

谢了

h_happy
驱动牛犊
驱动牛犊
  • 注册日期2001-05-09
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-01-08 15:33
问题问的不清不楚。
说明白一点啊。
每天都有一堆一堆的问题出现. 总希望有一个牛人出现在我的面前. 每个工程师的梦想大概也不过如此.
eepaul
驱动牛犊
驱动牛犊
  • 注册日期2001-12-14
  • 最后登录2002-04-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-01-08 15:52
是个虚拟网卡,用户用IOCTL与驱动交互.

在class VdevAdapter : public KNdisMiniAdapter
{
    .......
    // i/o
     NDIS_HANDLE m_DeviceHandle;
     PDEVICE_OBJECT  m_pDeviceObject;

     static NTSTATUS IoDispatch (IN PDEVICE_OBJECT  
                               DeviceObject, IN PIRP Irp);

    .....
}
因为IoDispatch是static的,所以不能调用SendCompletet()
IndicateReceive()等非静态成员函数.

如果我绕过Ds的封装,直接调用ddk NdisMIndicateReceivePacket(
    IN NDIS_HANDLE  MiniportAdapterHandle,
    IN PPNDIS_PACKET  ReceivePackets,
    IN UINT  NumberOfPackets
    );
的话,MiniportAdapterHandle我怎么在IoDispatch中得到.?

如果我把IoDispatch声明前static去掉.上面的问题高定
但是在NDIS_STATUS VdevAdapter::Initialize中

MajorFunctions[IRP_MJ_DEVICE_CONTROL] = IoDispatch;
因为IoDispatch为非静态(非全局量),这里编译不过.
NDIS_STATUS  Status = NdisMRegisterDevice(...);


怎么办,难道只能用DDK吗?????








eepaul
驱动牛犊
驱动牛犊
  • 注册日期2001-12-14
  • 最后登录2002-04-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-01-08 16:17
ft
用ddk重写了.还是C好:)
游客

返回顶部