首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

使用 VC6.0 整合環境快速開發 VxD

     編輯:關於VC++

VxD (Virtual Device Driver),即虛擬裝置驅動程式,運行於處理器 Ring 0 特權層級,可執行任何處理器指令、存取機器中任何資料暫存器。VxD 作為 Windows 9x 系統與實體裝置間的介面,擴展了 Windows 核心服務,能存取與控制實際硬體環境。

隨著 Windows 2000 和新一代裝置驅動模型 (WDM) 推出,預期 VxD 將逐漸過時,但現實是 Windows 98 系統仍佔據 90% 以上市場份額。如何掌握省時高效開發 VxD 的方法,成為程式設計師迫切需求。

傳統 DDK 開發 VxD 的三大痛點

  1. 編輯程式碼無圖形介面,仍在 DOS 命令列用 EDIT,不支援多視窗,檢視、取代程式碼極不方便
  2. 編譯只能用 VC 5.0,不能用 VC 6.0。Windows 98 DDK 說明文件明確提醒:Visual C++ 6.0 不支援任何範例
  3. 靜態 VxD 每次修改程式碼,都需在 system.ini [386Enh] 區段加入 device=VxD檔名,每次修改都得重新開機,漫長等待讓人無法忍受

使用 VtoolsD 3.0 解決方案

作者在開發「護花使者」反黃軟體時,採用 VtoolsD 3.0 撰寫檔案保護 VxD 模組。VtoolsD 3.0 是 Compuware 公司開發的軟體套件,包含實用工具:

  • QuickVxD:建立 VxD 的 C/C++ 語言框架,支援 VC 5.0、VC 6.0 和 Borland C++ 5.x。類似 VC AppWizard,但利用自訂巨集與類別產生程式框架
  • Debug Monitor:動態裝卸並顯示 VxD 偵錯資訊,不僅能載入動態 VxD,也能載入靜態 VxD。偵錯完畢可隨時卸載,成功避免編寫靜態 VxD 每次重開機的麻煩
  • VxdVer.exe:DOS 命令列工具,可設定 VxD 版本資訊。VC 6.0 無法設定 VxD 版本資訊,需透過 VxdVer 手動設定

具體開發步驟

1. 使用 QuickVxD 產生 VxD 框架程式

點擊「開始/Numega VtoolsD/QuickVxD」,開啟 QuickVxD,選取 Device Parameters 設定 Device Name = MY;選取 Output Files,按下 Generate Now 產生 VxD 框架原始程式,包含 3 個檔案:.h 標頭檔、.c/.cpp 程式碼檔、.mak 專案檔。將這 3 個檔案複製到 E:\my\ 目錄。

2. 將 VxD 專案檔整合進 VC 6.0 編譯器

在 VC 6.0 中新建工作空間檔案:選擇 File/New,選擇 Project 標籤,點擊 Makefile,Project Name 輸入 my,Location 輸入 E:\my(專案名稱與目錄名保持一致)。按 OK,在 Output 中將原本的 my.exe 改為 my.vxd,按 Finish。VC 6.0 自動產生 my.dsp 專案檔和 my.dsw 工作空間檔。之後可用 VC 6.0 編譯器產生 VxD:點擊 Build/Build my.vxd。

3. 將 VxD 原始檔整合進 VC 6.0 編輯器

在 Workspace 視窗選擇 FileView 頁面,右鍵點擊 Source Files,選擇 Add Files to Folder,加入 MY.cpp;同理加入 MY.h。此時可透過 Workspace 視窗觀察 VxD 類別,點擊 Class View 頁面可見 my.vxd 的 3 個類別:MyDevice、MyThread、MyVm。編輯 VxD 程式碼時,不再需要命令列的 EDIT.COM。

為更方便工作,需設定瀏覽資訊以使用 F12 查看類別定義與參考:

  1. 選擇 VC 6.0 選單:Project/Settings...
  2. 設定 Build Command Line: nmake /f "my.mak" BROWSE=1
  3. 設定 Browse info File Name: MY
  4. 按 OK,然後選擇 File/Open,開啟 MY.bsc

此時右鍵點擊原始碼視窗,捷徑選單會出現「Goto Definition of」和「Goto Reference of」兩個選項。

4. 將 Debug Monitor 加入 VC 6.0 工具選單

偵錯 VxD 原始碼時常用 dprintf() 或 dout<< 輸出偵錯資訊。Debug Monitor 可動態裝卸並顯示 VxD 偵錯資訊。點擊 VC 6.0 選單 Tools/Customize...,選擇 Tools 項,輸入新選單名稱「VxD Monitor」,設定 Command: C:\Program Files\NuMega\VtoolsD\Bin\monitor.exe,即可加入工具選單。偵錯時點擊此選單執行 Debug Monitor,選擇 File/Open Driver... 載入要偵錯的 VxD;選擇 File/Start Drive 執行 VxD,Debug Monitor 視窗即可顯示偵錯資訊。此功能相當於 VC 6.0 的 TRACE()。偵錯完畢退出 Debug Monitor 時,務必先點擊 File/Stop Driver 停止 VxD,否則再次進入必定導致系統當機。

5. 設定 VxD 版本資訊

軟體升級時,檔案版本資訊至關重要。VC 6.0 無法設定 VxD 版本資訊,只能透過 VxdVer 手動設定。作者嘗試透過 VC 6.0 加入版本資訊(修改標頭檔、設定 Resource Files)均失效。經查詢資料與摸索,找到設定方法:

若要產生的 VxD 是 MY.vxd,用 EDIT 新建同名 MY.vrc,以「護花使者」檔案防刪模組 antidel.vxd 為例,MY.vrc 內容如下:

CompanyName = "https://www.bianceng.cn"
FileDescription = "antidel file"
FileVersion = "Version 1.01"
InternalName = "ANTIDEL"
LegalCopyright = "mafeitao@371.net"
OriginalFilename = "antidel.vxd"
ProductName = "antidel"
ProductVersion = "Version 1.01"
Translation = 0x409, 0x4E4

存檔離開,命令列執行:VxdVer.exe my.vcr my.res,再用 VC 6.0 重新編譯 MY.vxd,版本資訊即設定成功。

結語

以前覺得編寫 VxD 很難,掌握方法其實不難。希望本文能為大家帶來幫助。有興趣的朋友可造訪作者網頁:https://iflower.363.net/,歡迎來信探討:mafeitao@sina.com

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved