VS2008 + WDK 配置 及其编译错误

来源:互联网 发布:阿里云服务器地域 编辑:程序博客网 时间:2024/04/27 17:38

1. 安装WDK,并配置系统环境变量:WDKROOT-D:\WinDDK\7600.16385.1

2. 启动VS2005,在菜单栏“工具”-“选项”内选择“项目和解决方案”-“VC++目录”依次添加所需的目录,具体配置如下图:

注意:$(WDKROOT)\inc\api一定要放在第一个,否则会导致编译失败

3. 具体的项目属性按照如下设置:

注:创建项目时选择“Win32项目”

 

代码例子:

 

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. #include <ntddk.h>  
  2. extern "C" VOID DriverUnload(IN PDRIVER_OBJECT pDriverObject);  
  3. extern "C" NTSTATUS DispatchRoutine(PDEVICE_OBJECT pDevObj, PIRP pIrp);  
  4.   
  5. extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject,PUNICODE_STRING pRegistryPath)//驱动入口  
  6. {  
  7.     DbgPrint("DriverEntry\r\n");  
  8.   
  9.     pDriverObject->DriverUnload = DriverUnload;//注册卸载函数  
  10.     pDriverObject->MajorFunction[IRP_MJ_CREATE] = DispatchRoutine;//注册派遣函数  
  11.     pDriverObject->MajorFunction[IRP_MJ_CLOSE] = DispatchRoutine;  
  12.     pDriverObject->MajorFunction[IRP_MJ_WRITE] = DispatchRoutine;  
  13.     pDriverObject->MajorFunction[IRP_MJ_READ] = DispatchRoutine;  
  14.   
  15.     return STATUS_SUCCESS;  
  16. }  
  17.   
  18. extern "C" VOID DriverUnload(PDRIVER_OBJECT pDriverObject)  
  19. {  
  20.     DbgPrint("DriverUnload\r\n");  
  21. }  
  22.   
  23. extern "C" NTSTATUS DispatchRoutine(PDEVICE_OBJECT pDevObj, PIRP pIrp)  
  24. {  
  25.     NTSTATUS status = STATUS_SUCCESS;  
  26.     pIrp->IoStatus.Status = status;  
  27.     pIrp->IoStatus.Information = 0;  
  28.     IoCompleteRequest(pIrp, IO_NO_INCREMENT);//完成IRP请求  
  29.     return status;  
  30. }  


编译运行,会发现提示错误,

 

第一种情况:

 

error LNK2019: 无法解析的外部符号 @__security_check_cookie@4

请您将“项目属性”-“C/C++”-“代码生成”的“缓冲区安全检查”设为“否”

 

第二种情况:

会出现error C3861: “SAL_functionClass”: 找不到标识符等等100多的错误信息,

 

形成原因是因为:安装了windows sdk6.0 和7.1的冲突, 在vc项目的lib, incluce里调整顺序。 把7.1放在6.0的前面。

 

第三种情况:

error LNK1295: “/MANIFESTUAC”与“/DRIVER”规范不兼容;链接时不使用“/MANIFESTUAC”

 

这是因为UAC开启导致的 , 进入项目 - 属性 - 连接器 - 清单文件 - 启用用户账户控制(否)即可

 

编译成功,出现系统文件:

0 0
原创粉丝点击