日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

编写第一个HelloWorld驱动程序

發布時間:2024/3/26 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编写第一个HelloWorld驱动程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

開發應用程序需要用到SDK,內核編程需要使用WDK(Windows Driver Kit),WDK已經自帶所需要的頭文件,庫,C/C++語言及匯編語言的編譯器與鏈接器,所有完全可以不用安裝Visual Studio。

1.首先我們下載安裝WinDDK,安裝過程沒有需要特備注意的地方,只有兩點:

(1)安裝到一個簡單一點的路徑,最好是根目錄。而且尤其要注意避免在安裝路徑上出現空格,否則會出現編譯問題

(2)選擇“完全安裝”,否則會錯過一些代碼例子。

2.編寫第一個C文件

首先打開記事本新建一個文件,然后把文件命名為first.c,在first.c中寫入下列代碼:

/// /// @file first.c /// @author /// @date /// #include <ntddk.h>// 提供一個Unload函數只是為了 VOID DriverUnload(PDRIVER_OBJECT driver) {// 但是實際上我們什么都不做,只打印一句話:DbgPrint("goodbye"); }// DriverEntry,入口函數。相當于main。 NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path) {// 這是我們的內核模塊的入口,可以在這里寫入我們想寫的東西。// 我在這里打印一句話。因為”Hello,world” 常常被高手恥笑,所以// 我們打印一點別的。DbgPrint("first: Hello, my salary!");// 設置一個卸載函數便于這個函數能退出。driver->DriverUnload = DriverUnload;return STATUS_SUCCESS; } 上面的DriverEntry是每個內核模塊的入口,相當于應用程序編程中的main函數,在加載這個模塊時被系統進程System調用一次。在其中我們寫了DriverUnload函數,這個模塊可以被動態的卸載(這樣方便我們調試程序)。

現在建立一個文件夾first,然后把first.c文件保存在這個目錄下,下面簡單介紹下編譯的方法。


3.編譯一個工程

前面已經建立了工程first,雖然這個工程只有一個first.c文件作為代碼文件,現在必須在這個目錄下增加這兩個文件,以便WDK的build工具可以build它。其中一個文件的名字必須是makefile,這個文件的內容是固定的,如下:

# # DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source # file to this component. This file merely indirects to the real make file # that is shared by all the driver components of the Windows NT DDK #!INCLUDE $(NTMAKEENV)\makefile.def 另外,還需要一個名字為SOURCES的文件,這個文件的內容關系到這個模塊要編譯哪些文件,以及編譯出來的.sys文件的名字,我的內容是這樣的:

TARGETNAME=first TARGETTYPE=DRIVER SOURCES=first.c其中TARGETNAME表示名字,編譯出來之后,模塊的名字為first.sys,SOURCES表示要編譯的.c文件,如果有多個,請用空格分隔。

下面從開始菜單中打開WDK的build環境配置,如圖:


如果你最終是在XP系統中運行這個程序,則選擇XP,根據你最終運行程序的系統來選擇。然后會有checkd和free另種版本可供選擇,測試選擇checkd版本,最后發布選擇free版本。

出現了一個控制臺,這個控制臺已經配置好了編譯環境,進入到我們需要編譯的目錄中,然后build即可


編譯結束,first.sys出現在\first\objchk_wxp_x86\i386下。


這個文件不像普通的exe文件可以雙擊執行,它需要一個安裝工具進行安裝。

4.安裝編譯好的內核模塊

這里選擇的是srvinstw.exe。安裝好之后打開:

(1)選擇安裝服務并單擊下一步按鈕,然后找到first.sys,這時需要輸入服務名稱,可以任意取名,在這里輸入first,名字只要不和已經存在的服務名稱沖突即可。

(2)輸入.sys的路徑,注意要進行手工輸入,瀏覽是找不到的

(3)選擇設備驅動,下一步

(4)輸入“NT設備驅動器名”,不需要輸入任何東西,直接點擊下一步

(5)選擇手動,方便操作。

5.運行安裝好的內核模塊。

cmd打開控制臺,輸入net start first 看到服務啟動成功就可以了。net stop first用于停止服務。

輸出的結果如何看到呢?下一篇將介紹Windbg的配置以及在虛擬機中運行內核模塊。

總結

以上是生活随笔為你收集整理的编写第一个HelloWorld驱动程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。