XiaoQJ
驱动牛犊
驱动牛犊
  • 注册日期2003-05-03
  • 最后登录2003-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1478回复:2

那位大侠能指定一下NdisMRegisterDevice的用法

楼主#
更多 发布于:2003-06-03 08:44
NDIS_STATUS
  NdisMRegisterDevice(
    IN NDIS_HANDLE  NdisWrapperHandle,
    IN PNDIS_STRING  DeviceName,
    IN PNDIS_STRING  SymbolicName,
    IN PDRIVER_DISPATCH  MajorFunctions[],
    OUT PDEVICE_OBJECT  *pDeviceObject,
    OUT NDIS_HANDLE  *NdisDeviceHandle
    );
我想问一下MajorFuction参数该如何给呢?

  我需要用户态程序使用DeviceIoControl,所以我的NDIS IM Driver就有相应于IRP_MJ_DEVICE_CONTROL的Dispatch函数
NTSTATUS  IoCtrlDispatcher
(IN PDEVICE_OBJECT Device Object,IN PIRP Irp)
{......}

所以在NdisMRegisterDevice时需要注册这个函数。可是MajorFunctions参数是函数指针,不仅对于IRP_MJ_DEVICE_CONTROL,
难道得用下面的代码吗?
PDRIVER_DISPATCH  MajorFunctions[IRP_MJ_DEVICE_CONTROL+1];
For(I=0;I< IRP_MJ_DEVICE_CONTROL;I++)
MajorFunctions[I]=NULL;
MajorFunctions[IRP_MJ_DEVICE_CONTROL]=DispatchControl;
ASSERT(STATUS_SUCCESS==NdisMRegisterDevice(WrapperHandle,” \\\\Device\\\\DeviceName”,”\\\\DosDevices\\\\SymbolicName”, MajorFunctions ,&DeviceObject,& NdisDeviceHandle));
请那位大侠指点一下MajorFunctions参数的正确用法。
XiaoQJ
驱动牛犊
驱动牛犊
  • 注册日期2003-05-03
  • 最后登录2003-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-03 11:18
谢谢,这段代码非常有参考价值。
另外再问一下,XP Passthru的PtRegisterDevice里使用了一个叫GlobalLock的Spin Lock。
但是NT Passthru里是没有一个GlobalLock,而是使用了每个Adapt的
pAdapt->SpinLock。
那么如果我拷贝XP Passthru的PtRegisterDevice到NT Passthru里
使用,能不能直接将GlobalLock替换成pAdapt->SpinLock。

iwub
驱动牛犊
驱动牛犊
  • 注册日期2002-10-09
  • 最后登录2009-06-22
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望60点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-17 14:41
你的调用在哪里?
如果在intial里面的话,传进来的wrapper参数和driverentry 中的不同的,要用全局变量保存,

还有Adapter也要保存一个指针,在IoXXXX 处理IRP是要用到的。



iwub
游客

返回顶部