阅读:1234回复:4
DriverStudio network问题-------高手进啊!!!!
在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的函数, 而有些又能调用呢? |
|
沙发#
发布于:2005-06-21 13:35
驱动在ring0运行,不能用ring3的一些库,其实rand,srand ntoskrnl.exe是有实现的,只要连接驱动的库如wdm.lib就够了
|
|
板凳#
发布于: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 |
|
地板#
发布于:2005-06-21 15:31
我没有用过driver works.你把msvcrt.lib,libs.lib,libcmt.lib都去掉,wdm.lib也不用,它缺省肯定会包含需要的库。你编译看看,如果time是vc的库,也不能用。
|
|
地下室#
发布于: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. |
|