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

NidsMRegisterDevice返回成功,CreatFile失败??

楼主#
更多 发布于:2002-01-11 00:33
我在Ntddk中的ne2000的基础上改写.(我的系统是win98Se)

在Ne2000Initialize中NdisMSetAttributesEx()
后面NidsMRegisterDevice

   ................
    
    UNICODE_STRING devname;
    UNICODE_STRING symbolname;

    NdisZeroMemory(MajorFunctions, sizeof(MajorFunctions));
    MajorFunctions[IRP_MJ_CREATE] =
    MajorFunctions[IRP_MJ_CLOSE] =
    MajorFunctions[IRP_MJ_CLEANUP] =
    MajorFunctions[IRP_MJ_READ] =
    MajorFunctions[IRP_MJ_WRITE] =
    MajorFunctions[IRP_MJ_DEVICE_CONTROL] = myDispatchDeviceControl;
    
    NdisInitUnicodeString(&devname, L\"\\\\Device\\\\MyNdisDevice\");
    NdisInitUnicodeString(&symbolname,L\"\\\\DosDevices\\\\MyNdisDevice\");


    //Register the device for IoCtl
    Status = NdisMRegisterDevice(
Ne2000MiniportBlock.NdisWrapperHandle,
&devname,
&symbolname,
MajorFunctions,
&(Adapter->pDeviceObject),
&(Adapter->DeviceHandle)
   );
   if(Status!=STATUS_SUCCESS)
   {
   KdPrint((\"NdisMRegisterDevice Fail\\n\"));
   return Status;
   }

用softice看NdisMregisterDevice返回值为0.(STATUS_SUCCESS).


在用户台程序中:
hDevice = CreateFile(\"\\\\\\\\.\\\\MyNdisDevice\", // drive to open
                    GENERIC_READ|GENERIC_WRITE,  //  
                           //need   R/W access to the drive
                       0,  // exclusive mode
                       NULL,    // default security
                                    //attributes
                       OPEN_EXISTING,  // disposition
                       0,       // file attributes
                       NULL);   // don\'t copy any file\'s
                               // attributes

if (hDevice == INVALID_HANDLE_VALUE) // we can\'t open the drive
  {
    errCode=GetLastError();
    printf(\"creatfile fail .Err Code is %d\\n\");
    return (FALSE);
  }

Creatfile失败,并且errcode==2(File not found).


太郁闷了,帮帮我吧




[编辑 -  1/11/02 作者: eepaul]

最新喜欢:

zackaryzackar... iwubiwub
zhizl
驱动牛犊
驱动牛犊
  • 注册日期2001-05-18
  • 最后登录2002-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-01-11 11:11
Win98se 的ndis driver 你如何编译的?? 教教我. I need it.
是否采用的是98ddk? 我正需要.

我跟你是同样的方法,不过我使用ntddk编译的.createfile 是成功的.或者你可以try to compile with ntddk, It\'s ok.
_____________________________ 虽然我不同意你的意见,但我坚决捍卫您发表意见的权利!!!
eepaul
驱动牛犊
驱动牛犊
  • 注册日期2001-12-14
  • 最后登录2002-04-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-01-11 12:41
我使用2000ddk变异的
zhizl
驱动牛犊
驱动牛犊
  • 注册日期2001-05-18
  • 最后登录2002-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-01-12 09:19
我仔细看了你的code, 跟俺的进行了对比.没有什么区别,but i am ok.
或者你用IoCreatDevice吧.

98的 NDIS 版本不支持NdisMRegisterDevice的.不过microsoft号称binary compatible. 我不十分信.

或者give u one more tips, 我在一篇文章看过, w2k编译的ndis driver如要跟98兼容, 必须打开一个选项开关,BINARY_COMPATIBLE=1才可.

good luck.
_____________________________ 虽然我不同意你的意见,但我坚决捍卫您发表意见的权利!!!
eepaul
驱动牛犊
驱动牛犊
  • 注册日期2001-12-14
  • 最后登录2002-04-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-01-13 16:10
多谢了.

还是不行.但是Driver Studio 2.6的那个Vdev的例子是好的.
我把编译Vdev用到的编译选项都加上,还是不行.
也不知道什么原因.:(

实在不行,只有用DS了.
eepaul
驱动牛犊
驱动牛犊
  • 注册日期2001-12-14
  • 最后登录2002-04-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-01-19 23:51
找到原因了.
creatfile是,相应的dispatch函数也会被调用,这时
传入参数的Code值为0.
我以前的代码
switch(code){
case IOCTL_VNIC_READ:
     ......
     Status=NDIS_STATUS_SUCCESS;
     break;
default:
     Status=STATUS_UNSUCCESSFUL;
}
     Irp->IoStatus.Information=nTotalBytes;
     Irp->IoStatus.Status=Status;
     IoCompleteRequest(Irp,IO_NO_INCREMENT );
     return Status;
}

所以CreatFile时Iodispatch返回STATUS_UNSUCCESSFUL,
所以CreatFile失败,将default:也改为NDIS_STATUS_SUCCESS;
就搞定
iwub
驱动牛犊
驱动牛犊
  • 注册日期2002-10-09
  • 最后登录2009-06-22
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望60点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-04-26 14:20
根据上面,的确可以。但是IO functions 执行了几次后,OID好像没有再发下来。好像被阻止了。不知兄台怎么解决的。可能是IO Control例程的问题。我发下的IRP代码是0x0,0x2,0xE
iwub
游客

返回顶部