VS2008 + WDK 配置 及其編譯錯誤


VS2008 + SP1 + Win7 X64

1. 安裝WDK,並配置系統環境變量:WDKROOT-D:\WinDDK\7600.16385.1

2. 啟動VS2005,在菜單欄“工具”-“選項”內選擇“項目和解決方案”-“VC++目錄”依次添加所需的目錄,具體配置如下圖:

注意:$(WDKROOT)\inc\api一定要放在第一個,否則會導致編譯失敗

3. 具體的項目屬性按照如下設置:

注:創建項目時選擇“Win32項目”

 

代碼例子:

 

#include <ntddk.h>  
extern "C" VOID DriverUnload(IN PDRIVER_OBJECT pDriverObject);  
extern "C" NTSTATUS DispatchRoutine(PDEVICE_OBJECT pDevObj, PIRP pIrp);  
  
extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject,PUNICODE_STRING pRegistryPath)//驅動入口  
{  
    DbgPrint("DriverEntry\r\n");  
  
    pDriverObject->DriverUnload = DriverUnload;//注冊卸載函數  
    pDriverObject->MajorFunction[IRP_MJ_CREATE] = DispatchRoutine;//注冊派遣函數  
    pDriverObject->MajorFunction[IRP_MJ_CLOSE] = DispatchRoutine;  
    pDriverObject->MajorFunction[IRP_MJ_WRITE] = DispatchRoutine;  
    pDriverObject->MajorFunction[IRP_MJ_READ] = DispatchRoutine;  
  
    return STATUS_SUCCESS;  
}  
  
extern "C" VOID DriverUnload(PDRIVER_OBJECT pDriverObject)  
{  
    DbgPrint("DriverUnload\r\n");  
}  
  
extern "C" NTSTATUS DispatchRoutine(PDEVICE_OBJECT pDevObj, PIRP pIrp)  
{  
    NTSTATUS status = STATUS_SUCCESS;  
    pIrp->IoStatus.Status = status;  
    pIrp->IoStatus.Information = 0;  
    IoCompleteRequest(pIrp, IO_NO_INCREMENT);//完成IRP請求  
    return status;  
}  

  


編譯運行,會發現提示錯誤,

 

第一種情況:

 

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開啟導致的 , 進入項目 - 屬性 - 連接器 - 清單文件 - 啟用用戶賬戶控制(否)即可

 

編譯成功,出現系統文件:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM