阅读:1371回复:3
ds中IoDispatch的问题
因为ds中的IoDispatch声明为静态函数,所以
里面不能调用非静态成员函数.就不能用SendComplete()等. 如果不把IoDispatch声明为静态,在初始化时 MajorFunctions[IRP_MJ_DEVICE_CONTROL] = IoDispatch; 有不行. 那位大哥有好的解决办法? 谢了 |
|
沙发#
发布于:2002-01-08 15:33
问题问的不清不楚。
说明白一点啊。 |
|
|
板凳#
发布于: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吗????? |
|
地板#
发布于:2002-01-08 16:17
ft
用ddk重写了.还是C好:) |
|