微軟有提供一系列的驅動程式範例,目前最新的驅動程式範例連結為microsoft/Windows-driver-samples,可直接下載或使用git clone/fork來取得驅動程式範例。
git clone https://github.com/microsoft/Windows-driver-samples.git
在範例中包含了許多常見裝置的驅動程式,例如藍芽、音訊、HID、網路、儲存裝置、WMI等。而如果要參考KMDF的範例,下面列出了幾個含有KMDF實作的例子。
在這當中以Non-PnP Driver Sample適合當作參考的範例,因為這個Non-PnP驅動程式提供了應用程式部分核心層級的服務,而且可以在應用程式運行時加載,並於退出應用程式時卸載,而且在例子中也有提供windows console app用於安裝及測試Non-PnP驅動程式是否正確運行。
下面是Non-PnP Driver Sample的檔案結構,分為exe
和sys
兩個部分,分別為測試和安裝驅動程式的windows console app及驅動程式本身,而ioctl.sln
則是Visual Studio的解決方案檔。
Windows-driver-samples
|------general
| |---ioctl
| | |--kmdf
| | |------exe
| | | |------install.c
| | | |------nonpnp.inf
| | | |------nonpnpapp.vcxproj
| | | |------nonpnpapp.vcxproj.Filters
| | | |------testapp.c
| | |------sys
| | | |------localwpp.ini
| | | |------nonpnp.c
| | | |------nonpnp.h
| | | |------nonpnp.rc
| | | |------nonpnp.vcxproj
| | | |------nonpnp.vcxproj.Filters
| | | |------public.h
| | | |------trace.h
| | |------ioctl.sln
各檔案的詳細說明如下:
install.c
: 安裝Non-PnP驅動程式所需的函式。nonpnp.inf
: 安裝Non-PnP驅動程式所需的inf檔案。testapp.c
: 測試及安裝Non-PnP驅動程式的windows console app本體。nonpnp.c
: Non-PnP驅動程式所需的所有函式。nonpnp.h
: Non-PnP驅動程式所需的標頭檔。public.h
: Non-PnP驅動程式及windows console app的共用標頭檔。trace.h
: 使用WPP軟體追蹤必要的標頭檔。以上就是Windows驅動程式範例如何下載及Non-PnP Driver Sample的檔案架構。
Windows 驅動程式範例 - Windows drivers | Microsoft Learn