就是那个ndisprot
XP系统下WINDDK编译,运行生成的测试程序在OpenHandle的时候调用
DeviceIoControl(Handle, IOCTL_NDISPROT_BIND_WAIT,NULL,0, NULL, 0,&BytesReturned,NULL))
返回失败CreateFile正常
到底是什么原因啊???//////////////////////////////////////////////////////////////////////////////////////////////
我对驱动程序编程还没多少了解,只是在抄书本上原始以太封包的例子的时候出了这个问题.
在网上又几乎找不到这类资料,为了问这个问题专门在这申请了一个号,
帮忙啊,我都快疯掉啦.书上的例子现在主要存在可能的问题是(不重要):
1)::StartService(hService,0,NULL);
返回ERROR_SERVICE_ALREADY_RUNNING;说是服务已经启动,存在问题的肯能性不大.2)BOOL bRet=::DeviceIoControl(hControl,IOCTL_ENUM_ADAPTERS,NULL,0,);
目的是得到绑定的适配器的数量,名称,连接符号.
返回失败,GetLastError()==50;估计跟测试程序的失败一样.3)就是上面那个DeviceIoControl的第二个参数
#define IOCTL_ENUM_ADAPTERS CTL_CODE(FILE_DEVICE_PROTOCOL, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
这在书上没定义,而且网上这定义有多个版本.
在测试程序中有一个函数EnumerateDevices的功能与书上的类似但它的DeviceIoControl的第二个参数是IOCTL_NDISPROT_QUERY_BINDING全指望你们啦...

解决方案 »

  1.   

    你是直接拿WDK中的例子来试的吗?用的哪个版本的WDK中的哪个目录下的程序?如果你做了修改,那么CreateFile和DeviceIoControl是怎么写的?另外驱动程序是怎么安装和启动的?错误码50表示不支持此功能号,你要确认一下DeviceIoControl给的第2参数的值是否正确。
      

  2.   

    搞定了,确实是在调用CreateFile的时候出了问题,原因是测试程序里没有调用OpenService开启服务.添加这段代码后运行正常.顺便问一下有没有关于DeviceIoControl错误的详细信息,我在MSDN6.0和网上都没找到.还有就是在Vista下提权来OpenSCManager的问题.
    网上说在资源中添加Manifest文件,代码也有了.
    但是具体怎么搞啊?
      

  3.   

    DeviceIoControl的错误码都是Windows定义的,在WinError.h里定义,在MSDN中输入system error codes也可以查到。Manifest文件,在项目属性中设置即可。如果是VS2005,在“Manifest Tool”—“Input and Output”中Additional Manifest Files。
      

  4.   

    谢谢,但我目前用的是VC6.0还有就是在测试程序中成功获取适配器信息,但进行读写操作的时候失败(Failed to accexx ...).
    还没来得及仔细看代码,可能是哪方面原因呢?
      

  5.   

    VC6里面没有相关设置,不知道怎么做,你在网上搜索一下吧。读写失败看CreateFile的参数是否正确。
      

  6.   

    啊啊啊,楼主我也遇到这问题啊。我在笔记本(win7)上程序运行没问题,但在开发板(其实就是一电脑,xp系统的)就出现这问题,请问您是怎么解决的?OpenService开启服务?神马意思啊?哎,烦