anylin
驱动牛犊
驱动牛犊
  • 注册日期2005-06-07
  • 最后登录2008-11-04
  • 粉丝0
  • 关注0
  • 积分365分
  • 威望45点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
阅读:1236回复:4

DriverStudio network问题-------高手进啊!!!!

楼主#
更多 发布于:2005-06-21 01:30
  在DriverStudio network向导生成出来的的框架代码里为什么不能调用一些c的函数, 而有些又能调用呢?

如:原来的Initialize里这样写:
              if (Config.ReadNetworkAddress(m_CurrentAddress) != NDIS_STATUS_SUCCESS) {
              
              m_CurrentAddress.Invalidate();
              
              //生成一个随机的mac地址,以减少冲突的可能性
              CHAR temp[12];

              for(int i = 0; i <= 5; i++) {
                     m_CurrentAddress.m_bytes = rand() % 256;
              }
              //转化mac地址
              TranslateAddr(temp, m_CurrentAddress.m_bytes);
              //将生成的mac地址写入注册表
              KNdisString valueStr((PSTR)&temp);
              Config.Write(KNDIS_STRING_CONST("NetworkAddress"), PNDIS_STRING(valueStr));

       }

         编译出来的虚拟网卡驱动都没问题,安装全好的

更改以后的Initialize:

                       if (Config.ReadNetworkAddress(m_CurrentAddress) != NDIS_STATUS_SUCCESS) {
              
              m_CurrentAddress.Invalidate();
              
              //生成一个随机的mac地址,以减少冲突的可能性
              CHAR temp[12];
                  
                  srand( (unsigned)time( NULL ) );

              for(int i = 0; i <= 5; i++) {
                     m_CurrentAddress.m_bytes = rand() % 256;
              }
              //转化mac地址
              TranslateAddr(temp, m_CurrentAddress.m_bytes);
              //将生成的mac地址写入注册表
              KNdisString valueStr((PSTR)&temp);
              Config.Write(KNDIS_STRING_CONST("NetworkAddress"), PNDIS_STRING(valueStr));

       }

在这个cpp前加了#include<time.h> 并在这个工程的setting的link选项卡里添加了MSVCRT.LIB LIBC.LIB LIBCMT.LIB
编译都通过的

但是生成的驱动就不行了 安装上去后就带问号了 不能运行



这是为什么 小弟真是不明白??????????????????????
在DriverStudio network向导生成出来的的框架代码里为什么不能调用一些c的函数, 而有些又能调用呢?
noproblem
驱动牛犊
驱动牛犊
  • 注册日期2002-07-24
  • 最后登录2005-12-14
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-06-24 09:14
虽然ktoskrnl.实现了rand和srand, 但用Microsoft  DDK的文档说, the kernel-mode driver should use it (RTL library, prefix Rtl) instead of ANSI-standard library routines.
你可以使用KeQueryTickCount或者类似的方法来产生random number.
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2005-06-21 15:31
我没有用过driver works.你把msvcrt.lib,libs.lib,libcmt.lib都去掉,wdm.lib也不用,它缺省肯定会包含需要的库。你编译看看,如果time是vc的库,也不能用。
anylin
驱动牛犊
驱动牛犊
  • 注册日期2005-06-07
  • 最后登录2008-11-04
  • 粉丝0
  • 关注0
  • 积分365分
  • 威望45点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-06-21 13:46
那具体是怎么操作的

我在setting里MSVCRT.LIB LIBC.LIB LIBCMT.LIB去了
添加了 wdm.lib

结果编译都通不过

错误是
NICAdap.obj : error LNK2001: unresolved external symbol __imp__time
.\i386\checked5\VNIC.sys : fatal error LNK1120: 1 unresolved externals
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2005-06-21 13:35
驱动在ring0运行,不能用ring3的一些库,其实rand,srand ntoskrnl.exe是有实现的,只要连接驱动的库如wdm.lib就够了
游客

返回顶部