首页
社区
课程
招聘
[求助]新手关于编译驱动的问题
发表于: 2010-10-19 16:07 6711

[求助]新手关于编译驱动的问题

2010-10-19 16:07
6711
怎么会这样 代码没问题,是ddk 中的例子!
加入

DECLARE_CONST_UNICODE_STRING(ntDeviceName, NT_DEVICE_NAME);
就会出错

ramdisk.c(360): error C2065: “ntDeviceName”: 未声明的标识符

头文件
#include <ntddk.h>
#include <ntdddisk.h>
#include <wdf.h>
#include <ntstrsafe.h>

vs 2010 中的设置

$(W7BASE)\bin\X86;
$(W7BASE)\inc\wdf\kmdf\1.9;$(W7BASE)\inc\ddk;$(W7BASE)\inc\wdf;$(W7BASE)\inc\api;

$(W7BASE)\lib\wdf\kmdf\i386\1.9;$(W7BASE)\lib\win7\I386

请高手帮助解决下,谢谢!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (7)
雪    币: 166
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看了头文件

DECLARE_CONST_UNICODE_STRING(ntDeviceName, NT_DEVICE_NAME);

难道就支持window2000的驱动!
2010-10-22 13:06
0
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
3
你声明了他还报错你没声明??
2010-10-22 13:10
0
雪    币: 166
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
声明了!

wdfcore.h
文件中
#if (OSVER(NTDDI_VERSION) == NTDDI_WIN2K)
//
// These definitions are necessary for building under a Win2K Environment.
//
#ifndef DECLARE_UNICODE_STRING_SIZE
#define DECLARE_UNICODE_STRING_SIZE(_var, _size) \
WCHAR _var ## _buffer[_size]; \
UNICODE_STRING _var = { 0, _size * sizeof(WCHAR) , _var ## _buffer }
#endif

我看看是不是ddk版本问题?
2010-10-22 13:16
0
雪    币: 166
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
ntdef.h

#if _WIN32_WINNT >= 0x0500

#define UNICODE_STRING_MAX_BYTES ((USHORT) 65534) // winnt
#define UNICODE_STRING_MAX_CHARS (32767) // winnt

#define DECLARE_CONST_UNICODE_STRING(_var, _string) \
const WCHAR _var ## _buffer[] = _string; \
__pragma(warning(push)) \
__pragma(warning(disable:4221)) __pragma(warning(disable:4204)) \
const UNICODE_STRING _var = { sizeof(_string) - sizeof(WCHAR), sizeof(_string), (PWCH) _var ## _buffer } \
__pragma(warning(pop))

#define DECLARE_GLOBAL_CONST_UNICODE_STRING(_var, _str) \
extern const __declspec(selectany) UNICODE_STRING _var = RTL_CONSTANT_STRING(_str)

#define DECLARE_UNICODE_STRING_SIZE(_var, _size) \
WCHAR _var ## _buffer[_size]; \
__pragma(warning(push)) \
__pragma(warning(disable:4221)) __pragma(warning(disable:4204)) \
UNICODE_STRING _var = { 0, (_size) * sizeof(WCHAR) , _var ## _buffer } \
__pragma(warning(pop))

#endif // _WIN32_WINNT >= 0x0500


#define NTDDI_WIN7                          0x06010000

不知怎么就跳了
2010-10-22 13:24
0
雪    币: 166
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我试着把这行改了
#if _WIN32_WINNT <= 0x0500

DECLARE_CONST_UNICODE_STRING(ntDeviceName, NT_DEVICE_NAME);
但出现
ramdisk.obj : error LNK2001: 无法解析的外部符号 _WdfFunctions
ramdisk.obj : error LNK2001: 无法解析的外部符号 _WdfDriverGlobals
ramdisk.obj : error LNK2019: 无法解析的外部符号 _SetForwardProgressOnQueue@4,该符号在函数 _RamDiskEvtDeviceAdd@8 中被引用
C:\Users\alonefort\documents\visual studio 2010\Projects\Ramdisk\alonefort\Ramdisk.sys : fatal error LNK1120: 3 个无法解析的外部命令

能用!

我请教一下用vs编译驱动,在哪里声明编写win7的驱动啊?

估计是这里不对!?谢谢!
2010-10-22 13:44
0
雪    币: 166
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
可能与   WIN32=400;_X86_=1;WINVER=0x500;DBG=1 有关系,但WINVER=0x501 改成xp的驱动也没用  不知怎么回事!?
2010-10-22 15:33
0
雪    币: 166
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
#define _WIN32_WINNT_NT4                    0x0400
#define _WIN32_WINNT_WIN2K                  0x0500
#define _WIN32_WINNT_WINXP                  0x0501
#define _WIN32_WINNT_WS03                   0x0502
#define _WIN32_WINNT_WIN6                   0x0600
#define _WIN32_WINNT_VISTA                  0x0600
#define _WIN32_WINNT_WS08                   0x0600
#define _WIN32_WINNT_LONGHORN               0x0600
#define _WIN32_WINNT_WIN7                   0x0601

这是ddk中的声明
WINVER=0x500 这一行我都设过!没用,请高手指教!
2010-10-22 15:39
0
游客
登录 | 注册 方可回帖
返回
//