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

VxD 程式設計入門教學 (二):應用程式與 VxD 通訊

     編輯:VC 教學

承接上集,本文說明 Windows 95/98 應用程式如何與 VxD 進行通訊。核心機制是透過 DeviceIoControl 函數傳送控制碼。以下提供完整範例程式 FHTEST.C,示範攔截檔案系統 API 的流程。

範例程式架構

程式建立一個標準視窗,於 WM_CREATE 時以 CreateFile 開啟 \\.\FILEHOOK.VXD 動態載入 VxD,再呼叫 DeviceIoControl 發送 INSTALL_FILE_SYSTEM_API_HOOK 安裝鉤子;WM_DESTROY 時發送 UNINSTALL_FILE_SYSTEM_API_HOOK 移除鉤子並關閉裝置控制代碼。

// WM_CREATE 片段
hDevice = CreateFile("\\\\.\\FILEHOOK.VXD", 0, 0, NULL, 0, FILE_FLAG_DELETE_ON_CLOSE, NULL);
if (hDevice != INVALID_HANDLE_VALUE) {
    bResult = DeviceIoControl(hDevice, INSTALL_FILE_SYSTEM_API_HOOK, NULL, 0, NULL, 0, &cb, 0);
    // 顯示安裝成功或失敗訊息
}

// WM_DESTROY 片段
if (hDevice != INVALID_HANDLE_VALUE) {
    bResult = DeviceIoControl(hDevice, UNINSTALL_FILE_SYSTEM_API_HOOK, NULL, 0, NULL, 0, &cb, 0);
    CloseHandle(hDevice);
}

執行結果

  • 鉤子安裝成功:彈出訊息框提示。
  • 之後每次執行開啟檔案操作,會顯示 "Open File!" 訊息框(由 VxD 端觸發)。
  • 程式結束時移除鉤子成功,後續開啟檔案不再彈出訊息。

此範例展示了完整的 VxD 載入、控制碼傳送、卸載流程,可作為檔案系統監控、防毒防火牆等核心元件的基礎架構。VxD 功能遠不止於此,善用 VMM 服務與 VxD 服務可開發出用戶模式 API 無法實現的高階應用。

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